加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-17 04:36:57 所属栏目:百科 来源:网络整理
导读:我想了解初始化模型嵌套字段的“正确”方法是什么. 假设您有一些模型的嵌套字段: class User has_one :address accepts_nested_attributes_for :addressend 并且您需要初始化这些属性(在这种情况下为地址)以在fields_for调用中使用它们. 到目前为止,我已经
我想了解初始化模型嵌套字段的“正确”方法是什么.

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

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.对我来说,给控制器这个责任,可能意味着在创建时他应该是解析和构??建嵌套属性的(在模型中发生).

我会选择第一种方法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读