当我使用attr_accessible
来指定我将公开模型中的哪些字段时,脚本/控制台也是如此吗?我的意思是我没有指定的东西attr_accessible
也不能通过控制台访问?
问问题
19465 次
5 回答
19
这仅适用于批量分配。例如,如果您要attr_protected :protected
在模型中设置:
>> Person.new(:protected => "test")
=> #<Person protected: nil>
相反,您可以使用attr_accessible
.
但是,以下内容仍然有效:
>> person = Person.new
=> #<Person protected: nil>
>> person.protected = "test"
=> #<Person protected: "test">
这与控制器、视图等中的行为相同。attr_protected
仅防止大量分配变量,主要来自表单等。
于 2009-11-25T01:56:24.590 回答
7
我找到了原因:
指定可通过批量分配设置的模型属性白名单,例如new(attributes)
、update_attributes(attributes)
或attributes=(attributes)
。这与 attr_protected 宏相反:
Mass-assignment will only set attributes in this list, to assign to the rest of
attributes you can use direct writer methods. This is meant to protect sensitive
attributes from being overwritten by malicious users tampering with URLs or forms.
If you‘d rather start from an all-open default and restrict attributes as needed,
have a look at `attr_protected`.
所以这意味着它只是避免批量分配,但我仍然可以设置一个值。
于 2009-11-24T13:26:59.330 回答
7
控制台的行为与 Rails 应用程序完全相同。如果您保护了特定模型的某些属性,您将无法从控制台或 Rails 应用程序本身批量分配这些属性。
于 2009-11-24T18:21:18.673 回答
1
当您指定某些东西时,attr_accessible
只有那些东西可以在控制台或网站界面中访问。
例如:假设你做了name
并且email
是attr_accessible
:
attr_accessible :name, :email
并省略了created_at
and updated_at
(你应该这样做)。然后您只能在控制台中编辑/更新这些字段。
于 2011-08-25T12:07:30.617 回答
0
如果要在模型中公开字段,可以使用
attr_accessor :meth # for getter and setters
attr_writer :meth # for setters
attr_reader :meth # for getters
或者如果你想为你的属性添加一些行为,你必须使用虚拟属性
def meth=(args)
...
end
def meth
...
end
干杯。
于 2012-02-17T09:29:07.373 回答