如何使用选择或集合选择?

时间:2013-01-19 20:30:53

标签: ruby-on-rails ruby ruby-on-rails-3

基本上,我有以下内容,并且我正在尝试在报价表单中使用collection_select来将company.addresses关系中的地址分配给我的报价模型中的has_one:address字段。在IRB中我可以简单地引用.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

你们会在引号和地址之间推荐一个联接表吗?保持公司并解决一对多的问题?

1 个答案:

答案 0 :(得分: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 %>

您可以在任何需要的地方为此NewTable接受accept_nested_attributes_。