在Rails中更新布尔值时的未定义方法

时间:2013-05-09 01:25:25

标签: ruby-on-rails

我正在尝试按照此处在Stackoverflow上发布的答案,以便在单击图像(Rails - How to update a single attribute in controller)时更新应用程序数据库中的布尔值。

但是,当我加载包含图像的页面时,我收到以下错误:

#<#:0x000000053d8150>

的未定义方法`toggle_is_contribution_comments_path'

我的路线档案:

resources :comments do
    member do
      put :toggle_is_contribution
    end
    end

控制器:

def toggle_is_contribution
    @comment = Comment.find(params[:work_id])
    @comment.toggle!(:is_contribution)

     respond_to do |format|
    flash[:success] = "Work updated"
    format.html { redirect_to root_path }
    format.js
  end
  end

视图:

<%= image_tag comment.user.photo.url(:avatar) %></span>&nbsp; <%= link_to comment.user.full_name, comment.user if comment.user %>
                                                <% if current_user == @work.user %>
                            <span class = "contribution">
                            <%= link_to image_tag("/assets/list_star.png"), comment, toggle_is_contribution_comments_path(comment),
                            :size => "15x15", :align => "right", :title=> "Add contribution to your work", :method=> :put %>
                            </span>
                        <% end %>

为什么应用不识别该方法?我做错了什么?我检查了我的模型,attr_accessible确实包含了is_contribution

谢谢! -b

编辑1:耙路线:

toggle_is_contribution_comment PUT    /comments/:id/toggle_is_contribution(.:format) comments#toggle_is_contribution
                      comments GET    /comments(.:format)                            comments#index
                               POST   /comments(.:format)                            comments#create
                   new_comment GET    /comments/new(.:format)                        comments#new
                  edit_comment GET    /comments/:id/edit(.:format)                   comments#edit
                       comment GET    /comments/:id(.:format)                        comments#show
                               PUT    /comments/:id(.:format)                        comments#update
                               DELETE /comments/:id(.:format)                        comments#destroy

编辑2:

将方法名称编辑为Mischa的答案后,我得到一个stringify键错误:

未定义的方法`stringify_keys'代表“/ comments / 1 / toggle_is_contribution”:字符串

编辑3:

修正了link_to但现在我得到了这个未定义的错误:

#&lt;#:0x00000004438ba0&gt;

的未定义方法`toggle_is_contribution_comments_path'

1 个答案:

答案 0 :(得分:1)

您应该使用:

toggle_is_contribution_comment_path(comment)

只需将_path粘贴到您在rake routes输出的第一列中看到的内容。

此外,您的link_to错了。而不是:

<%= link_to image_tag("/assets/list_star.png"), comment, toggle_is_contribution_comment_path(comment), etc.

做的:

<%= link_to image_tag("/assets/list_star.png"), toggle_is_contribution_comment_path(comment), etc.

请注意,link_to的第二个参数是url。所以这里不需要comment。传递toggle_is_contribution_comment_path(comment)作为第二个参数就足够了。