Ruby on rails 连接两个表,并使用下拉选择选择选择要形成(表1)的记录(表2)

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以及我的控制器

我想连接两个表我有一个表'persons'和一个表'Factorys'

我的问题是,我如何添加一个人,然后(通过下拉菜单)选择此人所属的工厂

我的个人模型:

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] })