4

我想问一下如何直接更新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"

注意:如果我在路由中使用 put "admin/update",我会得到 "No route matches [GET] "/admin/update.2" 错误,但是当我使用 get "admin/update" 时我没有得到任何错误,但我的 :reputation 不会更新。顺便说一句,:reputation 是一个整数

此外,如果我使用 User.find(params[:id]) 而不是 User.first,我会得到“找不到没有 ID 的用户”错误。

请帮忙。我该怎么办?我哪里做错了?

4

3 回答 3

5

对于单个属性,您可以使用:

@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)%>
于 2013-02-12T04:48:04.757 回答
0

为什么不

@user.reputation = 1
if @user.save
  #do something
else
  puts "Did not save"
end

您的accessible_attributes 中有声誉吗?

于 2013-02-12T03:51:46.613 回答
0

您的路线需要 PUT 方法。沿着这些路线的东西......

<%= link_to("Ban", admin_path(user), :confirm => "Are you sure?", :method => :put)%>

您在路由文件中的编辑和放置方法并不表示 :id 属性。在你的情况下,是这样的:

get "admin/:id/edit"
put "admin/:id"
于 2013-02-12T06:12:03.743 回答