好吧,我只是不明白这里有什么问题
我有这个应用程序,用户由管理员批准,直到几天前它工作正常
在我看来,我有一个调用我的用户控制器的链接
<%= link_to 'Approve', active_user_path(user), :method => :put %>
这是我对该链接的自定义路线
match "users/:id/activate" => "users#activate", :as => "active_user"
现在在我的用户控制器中我有这个激活方法
def activate
@user = User.find(params[:id])
puts @user.name #the correct name is displayed
puts @user.is_approved.inspect.to_i #:is_approved is 0
if @user.update_attribute(:is_approved, 1)
puts @user.is_approved.inspect # :is_approved is 1
@user.activate_user
puts @user.is_approved.inspect # :is_approved is 1
@user.save!
redirect_to "/users?is_approved=0"
else
render "/" # dosn't matter
end
end
我尝试在这里保存 3 次(更新、激活用户、保存!)但仍然不会保存值,用户is_approved
字段仍然是 0,这怎么可能?
这是我的模型方法
def activate_user
self.is_approved = 1
self.save
end
顺便说一句,我可以用这种方法更新字符串,但不能更新整数(true 和 false dosnt 都可以)
在我的模型中,我is_approved
同时拥有 attr_accessible 和 attr_accessor
解决方案
好吧,这很尴尬,但是碰巧在我的用户模型attr_accessor :approved
中,这导致该模型从未进入数据库来更新:approved
列,而是更新了局部变量:approved
,因此下次当我查看该列时,当然:approved
价值没有改变
tldr?如果您的模型中有 attr_accessor 与您尝试更新的列同名 => 删除它