[英]How to set value to alias_attribute?
我通過循環設置一些模型屬性:
USER_ATTRIBUTES = [:name, :foo]
USER_ATTRIBUTES.each do |field|
write_attribute(field, new_data[field])
end
:name
將在此處更新,但:foo
不會更新,因為它是:bar
的別名,這是我們存儲在數據庫中的別名。 在模型中:
alias_attribute :foo, :bar
因此,當循環到達write_attribute(:foo, new_data[:foo])
它將失敗,並出現ActiveModel::MissingAttributeError: can't write unknown attribute 'foo'
alias_attribute
所做的就是它,別名設置器和該屬性的幾個獲取器。 新的名稱不會成為一個真正的屬性。 因此,如果不希望使用原始的未別名的名稱,則唯一的選擇是調用設置器,而不是write_attribute
。
USER_ATTRIBUTES = [:name, :foo]
USER_ATTRIBUTES.each do |field|
send("#{field}=", new_data[field])
# equivalent to
# self.foo = new_data(:foo)
end
另外,這也應適用於所有其他非屬性設置器,例如attr_accessors。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.