Ruby on rails 连接两个表,并使用下拉选择选择选择要形成(表1)的记录(表2)
我想连接两个表我有一个表'persons'和一个表'Factorys' 我的问题是,我如何添加一个人,然后(通过下拉菜单)选择此人所属的工厂 我的个人模型:Ruby on rails 连接两个表,并使用下拉选择选择选择要形成(表1)的记录(表2),ruby-on-rails,ruby-on-rails-3,join,activerecord,Ruby On Rails,Ruby On Rails 3,Join,Activerecord,我想连接两个表我有一个表'persons'和一个表'Factorys' 我的问题是,我如何添加一个人,然后(通过下拉菜单)选择此人所属的工厂 我的个人模型: class Person < ActiveRecord::Base has_many :factories has_attached_file :cv attr_accessible :cv, :email, :function, :mobile, :telephone end class-Person以及我的控制器
class Person < ActiveRecord::Base
has_many :factories
has_attached_file :cv
attr_accessible :cv, :email, :function, :mobile, :telephone
end
class-Person
我的工厂模型:
class Factory < ActiveRecord::Base
belongs_to :persons
attr_accessible :last_name, :email, :telephone, :first_name, :website, :country
end
类工厂
我想这样做,例如:
|添加人| 函数:(输入字段) 电话:(输入字段) 移动:(输入字段) 电子邮件:(输入字段)
工厂(下拉菜单)您不能选择带有下拉菜单的工厂,因为此人有许多工厂。。。 你可以从另一个方向来做,当你创建一个工厂时,你可以用下拉菜单选择它所属的人。 如果您想像您所说的那样进行操作,您可以使用启用了multi-select的下拉菜单,并手动在控制器上进行处理,执行以下操作:
@person = Person.create(params[:person])
params[:factories].each do |f|
@person.factories << Factory.find(f)
end
您可能可以这样做: 控制器:
@people=Person.new
@factories = Factory.all
视图:
使用select_tag助手,它应该看起来像:select_tag(“factories”,options_from_collection__for_select(Factory.all,“id”,“name”),{:multiple=>true})好的,谢谢,我明天会试试,谢谢你的帮助。我不确定我是否得到它,所以它不是:person:have_许多工厂?问题是。我想将另一个表中的id存储到我的persons表中,以便您可以选择哪个工厂属于哪个人,您能给我一个示例代码,说明如何使用f.select执行此操作吗?我没有时间尝试,今天我要尝试iwiznia的答案,但它是一个选择标记,我希望它像f.select或a.select一样。我该怎么做呢?当我尝试您的代码时,我得到了nil:NilClass的错误未定义方法'map'。这是为什么?如果您正在执行@factories.map并得到此错误。我觉得工厂里没有人。在rails控制台中运行它并检查。我修复了它:)我在视图中使用了它。true%>以及我的控制器中的一些更改。谢谢,这个答案比另一个答案好。
@people=Person.new
@factories = Factory.all
form_for @people do |a|
.
.
.
= a.select :factory, options_for_select(@factories.map{ |f| [f.name, f.id] })