【问题标题】:fields_for fails to create objectfields_for 无法创建对象
【发布时间】:2015-12-22 19:44:38
【问题描述】:

我正在使用 form_for 和 fields_for 创建公司、地址和 company_person。

这是公司模型的相关部分:

class Company < ActiveRecord::Base
has_many :company_people
  accepts_nested_attributes_for :company_people
has_many :addresses, as: :location
  accepts_nested_attributes_for :addresses

我已将相关参数添加到 Companies 控制器:

def company_params
  params.require(:company).permit(:name, :email, :phone,
  :website, :ein, :description,
  {company_person_params: [:first_name, :last_name, :phone, :email]},
  addresses_attributes: [:id, :street, :city, :zipcode])
end

以下是公司控制者中负责这项工作的部分:

@company = Company.new
@company.assign_attributes(company_params)
@company.agencies << Agency.first
@company.company_people.build
@company.company_people << @company_person
if @company.save
  flash.notice = "Success!"   

这对于地址来说工作正常 - 它由“@company.assign_attributes(company_params)”处理。 它已保存,我可以在确认页面上打印没问题。但是 company_person 没有发生。我对所有事情都没有例外。我一直在关注本指南:http://guides.rubyonrails.org/form_helpers.html#nested-forms,但我仍然卡住了。

我做错了什么?

【问题讨论】:

    标签: ruby-on-rails forms form-for nested-form-for


    【解决方案1】:

    您的 company 对象似乎没有 company_person 属性的值。这可能是因为您的模型的设置方式。您的 CompanyCompanyPerson 模型需要定义一对多关系:

    class Company < ActiveRecord::Base
      has_many :company_people
      #whatever else
    end
    
    class CompanyPerson < ActiveRecord::Base
      belongs_to :company
      #whatever else
    end
    

    这是假设您的主键是默认的id。如果没有,你需要告诉 Rails 它们是什么。

    您可以在此处找到有关 ActiveRecord 关联的更多信息:http://guides.rubyonrails.org/association_basics.html

    【讨论】:

    • 谢谢。我已经解决了关联问题,并确认不是表格有问题。我将重写我的问题以匹配新信息
    猜你喜欢
    • 1970-01-01
    • 2015-03-19
    • 1970-01-01
    • 1970-01-01
    • 2013-10-22
    • 2017-10-01
    • 2013-10-21
    • 1970-01-01
    相关资源
    最近更新 更多