Ruby on rails 避免“attr_accessible”设置并从更新操作返回布尔值
我使用的是RubyonRails3,我想更新一个ActiveRecord,避免使用Ruby on rails 避免“attr_accessible”设置并从更新操作返回布尔值,ruby-on-rails,ruby,ruby-on-rails-3,attributes,Ruby On Rails,Ruby,Ruby On Rails 3,Attributes,我使用的是RubyonRails3,我想更新一个ActiveRecord,避免使用attr\u accessible设置,但从更新方法返回一个布尔值。为了避免使用attr\u accessible设置,我可以使用 @user.send :attributes=, @attrib, false 但这不会返回布尔值 我需要它,因为我必须以如下方式处理更新成功(当更新方法返回true)或错误(当更新方法返回false)行为: 在模型中: class User < ActiveRecord::
attr\u accessible
设置,但从更新方法返回一个布尔值。为了避免使用attr\u accessible
设置,我可以使用
@user.send :attributes=, @attrib, false
但这不会返回布尔值
我需要它,因为我必须以如下方式处理更新成功(当更新方法返回
true
)或错误(当更新方法返回false
)行为:
在模型中:
class User < ActiveRecord::Base
attr_accessible #none
# or
# attr_protected :name, :surname
end
class用户
在控制器中:
class UsersController < ApplicationController
# The following is the behaviour that I would like to handle (it is just an example: it is wrong and doesn't work)
if @user.send(:attributes=, { :name => params[:name], :surname => params[:surname] }, false)
...
else
...
end
end
class UsersControllerparams[:name],:lasname=>params[:lasname]},则为false)
...
其他的
...
结束
结束
可能吗?如果是,怎么做?如果没有,还有其他方法吗?
注意:为了避免AJAX注入,对我来说,重要的是只更新有限数量的属性,并且根本不更新
@user
ActiveRecord(参见上面示例中的代码)(也许我不必使用“全局”保存
)之类的方法 用false
调用attributes=
不会更新任何内容,它只是设置属性值,而忽略任何attr\u accessible
白名单
因此,您可以稍后调用
save
,它返回您要查找的布尔值。查看我的gem,它可能提供您要查找的功能。我构建它是为了更容易处理受保护的属性,添加了“sudo”方法,例如@model.sudo\u update\u attributes(params[:model])
,当您知道可以信任输入时。自述文件中有一些例子。绕过质量分配保护属性的正确方法是使用assign_属性(仅在Rails 3.1+中可用)
看
下面是一个例子:
user.assign_attributes({ :name => 'Joe' }, :without_protection => true)
我不确定。。。你能说得更准确些吗?也许,你能在我能读到的地方发布一些链接来理解你在说什么吗?你确定你在说什么吗?有人能证实吗?是的,我肯定。在控制台上尝试,您将看到
attributes=
不会写入数据库。