[英]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.