ruby-on-rails – 在Rails表单中初始化嵌套字段的正确方法

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 在Rails表单中初始化嵌套字段的正确方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想了解初始化模型嵌套字段的“正确”方法是什么.

假设您有一些模型的嵌套字段:

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)... %>

对于这种情况,是否有类似标准或“最佳实践”的内容?你是怎么做到的,为什么?

解决方法

我认为如果没有父模型,嵌套属性根本没有意义,那么这些嵌套模型的构建和初始化应该是父模型的责任.

我不明白为什么UsersController应该关心如何构建或初始化@ user.addresses.对我来说,给控制器这个责任,可能意味着在创建时他应该是解析和构​​建嵌套属性的(在模型中发生).

我会选择第一种方法.

猜你在找的Ruby相关文章