1

我正在尝试遵循 Stackoverflow 上发布的答案,以便在单击图像时更新我的​​应用程序数据库中的布尔值(Rails - 如何更新控制器中的单个属性)。

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

#<#: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 答案后,我得到一个字符串化键错误:

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

编辑 3:

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

#<#:0x00000004438ba0> 的未定义方法 `toggle_is_contribution_comments_path'

4

1 回答 1

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)就足够了。

于 2013-05-09T01:41:45.013 回答