gpt4 book ai didi

ruby-on-rails - 设置 Rails 模型属性顺序

转载 作者:行者123 更新时间:2023-12-03 16:02:37 26 4
gpt4 key购买 nike

在定义依赖于要设置的另一个方法的虚拟 setter 方法时,似乎在散列中设置的属性的顺序很重要。在仍然批量分配属性的同时,有没有办法解决这个问题?

https://gist.github.com/3629539

编辑

实际代码中的条件(示例中未显示)是检查关联对象是否存在。如果对象存在,则设置一个值。如果没有,忽略传入的值。不过,我也使用了accepts_nested_attributes_for。因此,属性哈希可能包含关联的属性。在这种情况下,对象将存在。

{:name => 'Fred', :nested_attributes => {:color => 'red'}}

因为模型不存在,所以不会设置名称。
{:nested_attributes => {:color => 'red'}, :name => 'Fred'}

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

最佳答案

有一个类似的问题,我得出了以下合理的通用解决方案:

def assign_attributes(new_attributes)
assign_first = new_attributes.extract!(:must_be_set_first, :must_also_be_set_first)
super(assign_first) unless assign_first.empty?
super(new_attributes)
end

使用 super使用您需要首先设置的提取参数值确保您处理属性分配的所有奇怪的特殊情况(它是一个引用?一个 params 哈希?一个多值参数?)。调用 assign_attributes重复使用散列的一部分确实应该与使用整个散列调用一次具有相同的效果 - 这应该是相当安全的。

关于ruby-on-rails - 设置 Rails 模型属性顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12273917/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com