繁体   English   中英

Rails 4下拉选择列表其他型号

[英]Rails 4 drop down select list different model

Rails的新手,所以我轻松一点:-)

我有2个模型:用户和角色:

class User < ActiveRecord::Base
  has_many :roles
  accepts_nested_attributes_for :roles
  validates_presence_of :role_id
end

class Role < ActiveRecord::Base
  belongs_to :user
end

用户具有外键的role_id。

我要做的就是能够在用户/新表单中为用户选择一个角色。 我知道这很容易,但是我似乎无法弄清楚……我已经读了好几个小时试图弄清楚了。 下拉选择列表显示在视图中,但始终会通过验证(就像它显示的一样,但实际上不会将用户选择的内容与User.role_id相关联)

这是我在表单中部分显示的内容:

<%= f.collection_select :role_id, Role.all, :id, :name %>

谁能指出我正确的方向? 也许我必须使用某种嵌套形式,但是我尝试过的任何方法似乎都无效,这就是我目前所拥有的。 我必须在控制器中做些事情吗?

如果User具有多个角色,则您的User模型必须不包含字段: user_id ,我认为并且希望用户具有并且属于许多角色。 然后,您需要第三个模型:

class User < ActiveRecord::Base
  has_many :user_roles
  has_many :roles, through: :user_roles
end

class Role < ActiveRecord::Base
  has_many :user_roles
  has_many :users, through: :user_roles
end

class UserRole < ActiveRecord::Base
  belongs_to :user
  belongs_to :role
  validates_presence_of :role_id, :user_id
end

在您的用户表单中,您可以使用它来更新关系(看起来:role_ids为复数形式)

<%= f.collection_select :role_ids, Role.all, :id, :name, {}, {multiple: true} %>

验证现在在UserRole模型中。

编辑 :如果您使用的是Rails 4.x,则需要允许角色集合的参数。

params.require(:user).permit(:user_field1, :user_field2, ... , role_ids: []) 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM