2013-01-19 125 views
1

本质上,我有以下,我试图在我的报价表格中使用collection_select从company.addresses关系中为我的报价模型中的has_one:地址字段分配一个地址。在IRB中,我可以简单地引用quote1.address = company1.addresses.first等,并且quote_id列将填充在地址实例中的appropiated中。如何使用select或collection select?

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

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 

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

回答

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 %> 

您可以在需要的地方accept_nested_attributes_for此NewTable。

+0

是的,我最终选择了address_id,一个报价只需要一个地址,所以地址和报价之间的一对一运作良好,我最终做了f.address_id,@ available_address.collect {| a | [a.line1,a.id]}等。另外,一个脚手架将是矫枉过正。感谢您的建议。 – TheIrishGuy