我想了解初始化模型嵌套字段的“正确”方法是什么.
假设您有一些模型的嵌套字段:
- class User
- has_one :address
- accepts_nested_attributes_for :address
- end
并且您需要初始化这些属性(在这种情况下为地址)以在fields_for调用中使用它们.
到目前为止,我已经想到了三种方法.
首先,对模型进行after_initialize挂钩:
- class User
- after_initialize :init_address
- protected
- def init_address
- address ||= build_address
- end
然后我们在控制器中进行初始化:
- class UsersController
- def new
- @user = User.new
- @user.build_address
- end
- end
最后,我们可以使用辅助方法为我们做到这一点:
- module FormHelpers
- def setup_user(user)
- user.address ||= user.build_address
- user
- end
- end
- # view
- <%= form_for setup_user(@user)... %>
对于这种情况,是否有类似标准或“最佳实践”的内容?你是怎么做到的,为什么?