首页 > 解决方案 > 创建另一个模型时如何更新现有模型?

问题描述

我有两个模型,用户和产品。产品属于用户,用户有很多产品。

创建产品时,我还想更新用户模型中的多个字段。我已经使用 Ruby 进行了 2 年的开发,但在涉及到这些东西时仍然不能完全理解表单。我还在permitted: false。现在我知道,例如,如果我正在创建一段时间,我user也会创建一个,但在这种情况下,我只想更新一个已经存在的记录。product@product.user.build

我也意识到我可能无法打电话f.fields_for :user,因为@product还不知道用户。在我的脑海中,我相信我应该能够将附加信息传递params给表单,current_userproduct#create操作中获取,然后通过调用 user.xml 手动更新属性update_attributes

产品.rb

  accepts_nested_attributes_for :user

产品控制器

def new
  @product = Product.new
end

params.require(:product).permit(:product_name, user_attributes: [:phone_number, :email_address])

产品视图


form_for @product do |f|

  f.fields_for :user do |c|

    c.text_field :phone_number
    c.text_field :email_address

  f.text_field :product_name
end


标签: ruby-on-railsruby

解决方案


我也意识到我可能无法调用 f.fields_for :user 因为@product 还不知道用户。

您可以将属性分配给 @product 而不保存它。

def new
  @product = Product.new(
    user: current_user
  )
end

现在@product.user工作。


推荐阅读