我想问一下如何直接更新rails中的单个属性。我已经尝试了很多方法来解决它,但它们都没有用。目前,在我看来,我有这行代码:
<%= link_to("Ban", admin_update_path(user), :confirm => "Are you sure?")%>
然后在我的控制器中:
def update
@user = User.first
if @user.update_attributes(:reputation =>1)
redirect_to admin_viewAllUsers_path, :notice => "User banned!"
else
render "index"
end
end
然后在我的路线中:
get "admin/edit"
put "admin/update"
注意: 如果我在我的路由中使用“admin / update”,我会得到“No route matches [GET]”/admin/update.2“错误,但是当我使用”admin / update“时我没有收到任何错误但我的:声誉不会更新。顺便说一句,:声誉是一个整数
此外,如果我使用User.find(params [:id])而不是User.first,我将得到“找不到没有ID的用户”错误。
请帮助。我该怎么办?我哪里出错了?
答案 0 :(得分:2)
对于单个属性,您可以使用:
@user.update_attribute(:reputation,1)
对于我的意见更新行动,它是不同的(更改名称,姓氏等)不仅禁止,我认为你应该创建行动ban
:
def ban
@user = User.find(params[:id])
@user.update_attribute(:reputation,1)
redirect_to admin_viewAllUsers_path, :notice => "User banned!"
end
及其路线:
match 'admin/users/:id/ban', :to => 'users#ban', :as => 'admin_user_ban', :via => :post
最后链接:
<%= link_to("Ban", admin_user_ban_path(user), :confirm => "Are you sure?", :method => :post)%>
答案 1 :(得分:0)
为什么不
@user.reputation = 1
if @user.save
#do something
else
puts "Did not save"
end
是您的accessible_attributes中的声誉吗?
答案 2 :(得分:0)
您的路线期待PUT方法。这些方面的东西......
<%= link_to("Ban", admin_path(user), :confirm => "Are you sure?", :method => :put)%>
您在路线文件中的编辑和放置方法不表示:id属性。在你的情况下,像这样:
get "admin/:id/edit"
put "admin/:id"