我认为这个问题的第一个版本过于复杂,并且证明了解决问题的不正确尝试。请考虑此假设迁移文件中的模型:
class CreateProjects < ActiveRecord::Migration
def self.up
create_table :projects do |t|
t.references :oem1
t.references :oem2
t.references :oem3
t.timestamps
end
end
def self.down
drop_table :projects
end
end
此计划有必要:
通过创建此迁移文件中显示的模型,可以轻松实现第二个目标:
class CreateOems < ActiveRecord::Migration
def self.up
create_table :oems do |t|
t.string :name
t.timestamps
end
end
def self.down
drop_table :projects
end
end
如果我在PROJECTs模型中没有三个独特的OEM变量,我只需要 PROJECT:belongs_to oems 和 OEM:has_many项目,然后使用 collection_select 从OEM模型中选择OEM名称,并将其分配给PROJECTs模型中的OEM参考变量。但是,我有三个OEM变量,它们不能全部命名为OEM。所以,据我所知,我无法将所有这三个变量链接到collection_select下拉列表中的OEM.name变量。
那么,我该怎么办?还有另一种方法来实现这两个目标吗?
答案 0 :(得分:1)
我想我可能会误解你,但你是说这不起作用吗?
- oems = Oem.all
= collection_select(:project, :oem1, oems, :id, :name, :prompt => true)
...
= collection_select(:project, :oem2, oems, :id, :name, :prompt => true)
...
= collection_select(:project, :oem3, oems, :id, :name, :prompt => true)
答案 1 :(得分:1)
在表单中,您可以执行以下操作:
<%= form_for @project do |f| %>
<p>
<%= f.label :oem1 %>
<%= f.collection_select :oem1, Oem.all, :name, :name %>
</p>
<p>
<%= f.label :oem2 %>
<%= f.collection_select :oem2, Oem.all, :name, :name %>
</p>
<p>
<%= f.label :oem3 %>
<%= f.collection_select :oem3, Oem.all, :name, :name %>
</p>
<!-- The rest of your form... -->
<% end -%>
不确定您的要求,但听起来项目和oems之间的关系是多对多的。那么,如何使用has_and_belongs_to_many
?