设置Rails模型属性顺序

efo*_*foo 5 ruby-on-rails

在定义依赖于另一个要设置的方法的虚拟setter方法时,看起来在哈希中设置的属性的顺序很重要.有没有办法围绕这个仍然大规模分配属性?

https://gist.github.com/3629539

编辑

实例中未显示的条件是检查关联对象是否存在.如果对象存在,请设置一个值.如果没有,请忽略传入的值.但是,我也使用accepts_nested_attributes_for.因此,属性哈希可以包含关联的属性.在这种情况下,对象将存在.

{:name => 'Fred', :nested_attributes => {:color => 'red'}}
Run Code Online (Sandbox Code Playgroud)

将不会设置名称,因为该模型将不存在.

{:nested_attributes => {:color => 'red'}, :name => 'Fred'}
Run Code Online (Sandbox Code Playgroud)

accepts_nested_attributes_for将构建一个嵌套实例,然后设置属性.当要设置名称时,实例将存在并且将设置嵌套属性.

Rob*_*bin 0

我现在能想到的唯一解决方案是覆盖属性设置器......

def attributes=(attrs)
    self[:dont_set_name] = attrs.delete(:dont_set_name)
    super
end
Run Code Online (Sandbox Code Playgroud)