Ruby on rails 更新Rails中的单个属性

Ruby on rails 更新Rails中的单个属性,ruby-on-rails,Ruby On Rails,我想问一下如何直接更新rails中的单个属性。我已经尝试了很多方法来解决这个问题,但是没有一个有效。目前,在我看来,我有以下代码行: “你确定吗?”)%> 然后在我的控制器中: def update @user = User.first if @user.update_attributes(:reputation =>1) redirect_to admin_viewAllUsers_path, :notice => "Use

我想问一下如何直接更新rails中的单个属性。我已经尝试了很多方法来解决这个问题,但是没有一个有效。目前,在我看来,我有以下代码行:

“你确定吗?”)%>

然后在我的控制器中:

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”时,我没有得到任何错误,但是我的:声誉不会更新。顺便说一句,声誉是一个整数

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

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

为什么不

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

声誉是否在您的可访问属性中?

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

@user.update_attribute(:reputation,1)
对于我的意见更新行动,它是smth不同的(更改名称、姓氏等)。不仅是ban,我认为您应该创建行动
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)%>
“你确定吗?”,:method=>:post)%>

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

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

你的错误到底是什么?目前,我没有错误,但我的用户不会更新。用户属性不起作用。你的:声誉字段类型是什么?检查
#update#attributes
返回的错误。尝试在
呈现“索引”
行之前添加调试行查看日志文件,查看是否收到关于reput的警告不可批量分配,然后检查您的用户模型中的attr\u accessible或attr\u protected的内容。它不起作用。是因为我的路由吗?如果我在路由中使用put“admin/update”,我将得到“No route matches[get]”/admin/update.2“错误,但当我使用get“admin/update”时我没有收到任何错误,但我的声誉不会更新。顺便说一句,声誉是一个整数你是对的,我更新了我的答案,你可以查看@Swards answer,除非它是一个api,我建议使用“POST”或add:method=>:put是因为我使用User.first而不是User.find(params[:id])?
get "admin/:id/edit"
put "admin/:id"