Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 避免“attr_accessible”设置并从更新操作返回布尔值_Ruby On Rails_Ruby_Ruby On Rails 3_Attributes - Fatal编程技术网

Ruby on rails 避免“attr_accessible”设置并从更新操作返回布尔值

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::

我使用的是RubyonRails3,我想更新一个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=
不会写入数据库。