代码之家  ›  专栏  ›  技术社区  ›  Satchel

如何使标记可内联编辑(或提交),而不必转到模型的“编辑”模式?

  •  0
  • Satchel  · 技术社区  · 15 年前

    <div id = 'tags'>
      <strong>Tags:</strong>
      <% unless @company.tag_list.empty? %>
         <%= @company.tag_list %>
      <% end %>
      <% form_remote_tag(:url => {:action => 'update'},
                         :update => 'tags') do  %>
        <%= text_field :company, :tag_list %>   
           <%= submit_tag 'Save' %> 
      <% end %>
    </div>
    

    我在宝石上用的是可标记的。

      def update
        @company = Company.find(params[:id])
        if @company.update_attributes(params[:company])
          flash[:notice] = "Successfully updated company."
          redirect_to @company
        else
          render :action => 'edit'
        end
      end
    

    我想我想要的结果是我可以添加标签,通过ajax看到它们被添加,所有这些都不需要编辑模型,但是从show视图来看,就像你可以在Wordpress中添加标签一样。

    POST http://localhost:3000/companies/10
    No action responded to 10. Actions: create, destroy, edit, email_this_week, index, new, show, and update
    

    嗯,不知道它为什么这么做……它应该做更新操作,对吧?我需要在我的路线上做些什么吗(即使我指定了动作?)

    2 回复  |  直到 15 年前
        1
  •  0
  •   nathanvda    15 年前

    你就快到了。

    首先创建部分 tags 呈现标签和ajax表单(在问题中显示)。

    然后在控制器方法中编写:

    def update
      @company = Company.find(params[:id])
      if request.xhr?
        # add the given tag to the company
        @company.tags << params[:company][:taglist]
        @company.save
        render :partial => 'tags'
      else
        if @company.update_attributes(params[:company])
          flash[:notice] = "Successfully updated company."
          redirect_to @company
        else
          render :action => 'edit'
        end
      end
    end
    

    我要做的:我测试请求是否是ajax请求( xhr? update_attributes 不起作用,因为您将要向现有标记列表中添加标记。如果成功,则呈现将替换先前部分的部分,因为 update -在表单中指定的选项。

    为了进一步改进它,您应该在每个标记中添加一个带有链接的图像(红十字),以删除给定的标记。