我想加入两张桌子,我有桌子'人'和桌子'工厂'。
我的问题是,我如何添加一个人而不是选择(带下拉列表)该人所属的工厂?
我的人模特:
class Person < ActiveRecord::Base
has_many :factories
has_attached_file :cv
attr_accessible :cv, :email, :function, :mobile, :telephone
end
我的工厂模型:
class Factory < ActiveRecord::Base
belongs_to :persons
attr_accessible :last_name, :email, :telephone, :first_name, :website, :country
end
我想这样做:
|添加人员|
功能:(输入字段)
电话:(输入栏位)
移动:(输入字段)
电子邮件:(输入字段)
出厂(下拉)&lt; =这是我想要的实际字段,默认情况下不会放在人员表中。
CV :(上传字段)
提交:(提交按钮)
我希望你明白我想拥有什么,希望有人可以提供帮助。
**编辑1 我改变了我的计划。我想在人员表中的一列中选择一个factory.id。
我在Person表中创建了一个名为factory.id的列,现在我将存储该列中另一个表的数据。 这可能吗?**
答案 0 :(得分:0)
你不能选择带有下拉列表的工厂,因为Person has_many工厂...... 您可以在另一个方向上执行此操作,当您创建工厂时,可以使用下拉列表选择其所属的人员。 如果你想像你说的那样做,你可以在启用多选的情况下获得一个下拉菜单,并在控制器上手动处理,执行如下操作:
@person = Person.create(params[:person])
params[:factories].each do |f|
@person.factories << Factory.find(f)
end
在你看来:
select_tag("factories", options_from_collection_for_select(Factory.all, "id", "name"), {:multiple => true})
答案 1 :(得分:0)
您可以这样做:
控制器:
@people=Person.new
@factories = Factory.all
查看:
form_for @people do |a|
.
.
.
= a.select :factory, options_for_select(@factories.map{ |f| [f.name, f.id] })