我正在尝试按照此处在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> <%= 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'答案 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)
作为第二个参数就足够了。