【问题标题】:has_many through association with adding information to middlehas_many 通过关联向中间添加信息
【发布时间】:2014-06-19 17:07:37
【问题描述】:

我有两个模型由一个中间模型加入

class Integration < ActiveBase
  has_many :integration_records
  has_many :records, through: :intragration_records
end

class IntegrationRecords < ActiveBase
 belongs_to :integrations
 belongs_to :records
end

class Records < ActiveBase
  has_many :integration_records
  has_many :integrations, through: :intragration_records
end

现在,IntegrationRecords 有一个默认为 nil 的 JSON 数据列。

我想创建一个集成及其各自的记录并将数据添加到 integration_records 上的数据列

我想过这样的事情,但没有奏效:

 Integration.create!(whatever_data).integration_records.create(data: {}).records.create(whatever)

这失败了...我注意到它会自动为

创建一条记录
 Integration.create!(whatever_data).integration_records.create(data: {})

所以接下来的想法是:

 Integration.create!(whatever_data).integration_records.create(data: {}).records.update(whatever)

没用。帮助别人!

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 ruby-on-rails-3.2 has-many-through


    【解决方案1】:

    这实际上就是

    所以一个选择:

    class Integration < ActiveBase
      has_many :integration_records
      has_many :records, through: :intragration_records
    end
    
    class IntegrationRecords < ActiveBase
     belongs_to :integrations
     belongs_to :records
    end
    
    class Records < ActiveBase
      has_many :integration_records
      has_many :integrations, through: :intragration_records
    end
    
    i = Integration.create!(data)
    i.records << Record.create!(data)
    

    应该可以的。

    【讨论】:

    • 现在我得到这个错误:No association found for name records'。已经定义了吗?`
    • 哎呀,这行不通,accepted_nested_attributes_for 仅适用于父模型-> 子模型。时刻!
    • 运气好吗?看看我的另一个问题:stackoverflow.com/questions/23438421/…
    【解决方案2】:

    也许您可以逐步尝试。 1-创建集成 2-创建 integration_record 3- 创建记录

    integration = Integration.create!(whatever_data)
    integration_record = integration.integration_records.create!(data: {})
    record = integration_record.records.create!(data: {})
    

    您可以添加事务以确保仅在创建 integration_record 和 record 时记录 integration。

    【讨论】:

      猜你喜欢
      • 2014-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多