Fed*_*les 8 ruby model-view-controller ruby-on-rails
我想了解初始化模型嵌套字段的"正确"方法是什么.
假设您有一些模型的嵌套字段:
class User
has_one :address
accepts_nested_attributes_for :address
end
Run Code Online (Sandbox Code Playgroud)
并且您需要初始化这些属性(address在本例中)以在fields_for调用中使用它们.
到目前为止,我已经想到了三种方法.
首先,after_initialize挂钩模型:
class User
after_initialize :init_address
protected
def init_address
address ||= build_address
end
Run Code Online (Sandbox Code Playgroud)
然后我们在控制器中进行初始化:
class UsersController
def new
@user = User.new
@user.build_address
end
end
Run Code Online (Sandbox Code Playgroud)
最后,我们可以使用辅助方法为我们做到这一点:
module FormHelpers
def setup_user(user)
user.address ||= user.build_address
user
end
end
# view
<%= form_for setup_user(@user)... %>
Run Code Online (Sandbox Code Playgroud)
对于这种情况,是否有类似标准或"最佳实践"的内容?你是怎么做到的,为什么?
我相信在声明 has_one 关联后, build_address 已经内置于 Rails 中,因此您不需要自己编写该位。如果仅从新操作调用表单,那么您真正需要的只是控制器位,而不是其他
| 归档时间: |
|
| 查看次数: |
1967 次 |
| 最近记录: |