簡體   English   中英

如何設置alias_attribute的值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM