0

本质上,我有以下内容,我试图在我的报价单中使用 collection_select 将 company.addresses 关系中的地址分配给我的报价模型中的 has_one :address 字段。在 IRB 中,我可以简单地 quote1.address = company1.addresses.first 等,quote_id 列将在地址实例中填写。

现在,这个数据库设置可能看起来很简单,并且可能是实现这些关系的更好方法,但是由于可寻址类型和字段更改为引用关系,多态地址给我带来了问题,从而脱离了公司地址关系。无法弄清楚如何克隆它们。但是,无论如何,有没有人建议如何使用下面的数据库设置在我的报价单中完成我的第一个问题?

class Address < ActiveRecord::Base
  belongs_to :company
  has_many :quotes
  attr_accessibles ...
  .....
end

class Company < ActiveRecord::Base
  has_many :addresses
  accepts_nested_attributes_for :addresses
  has_many :quotes
  attr_accessibles ...
  ....
end

class Quote < ActiveRecord::Base
  belongs_to :address
  belongs_to :company
  accepts_nested_attributes_for :address
  ... attr_accessibles ....
  ....
end

你们会推荐报价和地址之间的连接表吗?并保持公司和地址一对多?

4

1 回答 1

1

制作另一个表格,将您的报价与地址连接起来。

创建一个新的脚手架。

$ rails g scaffold NewTable quote_id:integer address_id:integer

用此代码替换表单。我无法测试它,但它应该相当准确。

<%= form_for @new_table do |f| %>
  <%= f.hidden_field(:quote_id, value: @quote.id) %>
  <%= f.collection_select(:new_table, :address_id, Address.all, :id, :name, :prompt => true) %>
<% end %>

您可以在任何需要的地方接受_nested_attributes_for 这个 NewTable。

于 2013-01-20T00:52:30.897 回答