如何使用链接/按钮更改列属性 - Ruby on Rails

Posted

技术标签:

【中文标题】如何使用链接/按钮更改列属性 - Ruby on Rails【英文标题】:How to change a column attribute with a link/button - Ruby on Rails 【发布时间】:2016-12-14 01:50:38 【问题描述】:

我正在学习 RoR,我目前正在尝试在我的网站中实施一个投票系统。用户可以登录并在论坛上发布 cmets,然后在该论坛上为其他 cmets 投票。

控制器代码

 def upvote
    @comment = Comment.find(params[:comment])
    @comment.update_attribute('upVote', @comment.upvote + 1)
    redirect_to :back
 end

节目中的链接

 <%= link_to 'Up Vote', comment_upvote_path(comment.id), method: :put %>

我尝试用评论替换 (comment.id) 无济于事。

路线

get 'upvote', :to=>'comments#upvote'

resources :comments do
 put :upvote
end

点击投票时出现的错误:

找不到带有 'id'= 的评论

app/controllers/cmets_controller.rb:26:in `upvote' 请求

参数:

"_method"=>"放", "authenticity_token"=>"HNXyufzGsXi/SZoJsa+2uouMKVYlH6vYTHOF8iMgj6zAHO13jApk+QO33xEonkcoFgMugwYQZpSom1+KbVRe7g==", "comment_id"=>"11"

我查了一下,有一条 id 为 11 的评论存在,所以我真的不知道是什么导致了这个错误。任何帮助将不胜感激!

【问题讨论】:

【参考方案1】:

从表面上看,:comment 应该是 :comment_id 就像这样。

@comment = Comment.find(params[:comment_id])

【讨论】:

啊,是的,非常感谢,不敢相信我没有看到。我现在得到: nil:NilClass 的未定义方法“+”。所以我认为我应该使用 rails 已经为我准备的某种增量方法。 @EduardoTafner:那是因为你从 0 开始,默认为 nil:NilClass。您可以使用@comment.increment('upVote') 递增 1。【参考方案2】:
put :upvote

应该是

put :upvote, on: :member

【讨论】:

以上是关于如何使用链接/按钮更改列属性 - Ruby on Rails的主要内容,如果未能解决你的问题,请参考以下文章

Ruby on Rails:如何使用迁移向现有列添加非空约束?

Ruby on Rails 无需密码即可更新用户属性

如何在 Ruby on Rails 迁移中使列唯一并为其编制索引?

如何在 ruby​​ on rails 中更改路线?

Ruby on Rails 的社交媒体共享按钮 Gem

如何检查特定属性是不是是有效的 ruby​​ on rails