Ana*_*and 14 ruby ruby-on-rails ruby-on-rails-3
当我在rails中覆盖嵌套属性方法时会发生什么.例如,
class Order
has_many :line_items
accepts_nested_attributes_for :line_items
def line_item_attributes=(attr)
# what can I do here.
end
end
class LineItem
belongs_to :order
end
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,
line_item_attributes=方法中,我可以添加/修改/删除订单的订单项吗?line_items_attributes=调用,如果我打电话@order.save(params)?在Rails 4中,您可以覆盖和调用super.
在早期版本中,您可以使用Ruby alias:
class Order
has_many :line_items
accepts_nested_attributes_for :line_items
# order of arguments is new_name, existing_name
alias :original_line_items_attributes= :line_items_attributes=
def line_items_attributes=(attrs)
modified_attributes = my_modification_method(attrs)
self.original_line_items_attributes = modified_attributes
end
end
Run Code Online (Sandbox Code Playgroud)
assign_nested_attributes_for_collection_association(:line_items, attributes, mass_assignment_options)
当你完成了.
检查来源: # File activerecord/lib/active_record/nested_attributes.rb, line 263
保存
模型的所有更改(包括标记为销毁的模型的销毁)都会在保存父模型时自动保存并自动销毁.这发生在父节点方法启动的事务中.请参阅ActiveRecord :: AutosaveAssociation.
我不认为覆盖这种方法是个好主意.我会把你的代码添加到after_save钩子.
| 归档时间: |
|
| 查看次数: |
3260 次 |
| 最近记录: |