在我的注册视图页面中我的collection_select有什么问题

我是rails的新手,

我正在使用ryan batesvideo教程的设计,而且,我一度陷入困境

我创建了用户,角色关系

在注册页面中,我需要为现有角色提供选择选项组,

在我正在写的注册视图页面

 

我没有准确理解collection_select方法,请帮助我可能做错了

我的模型1:user.rb

 class User < ActiveRecord::Base has_and_belongs_to_many :roles devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable attr_accessible :email, :password, :password_confirmation, :remember_me , :roles has_and_belongs_to_many :roles def role?(role) return !!self.roles.find_by_name(role.to_s.camelize) end end 

我的模型2:role.rb

 class Role < ActiveRecord::Base attr_accessible :name has_and_belongs_to_many :users end 

我的用户迁移文件

 class DeviseCreateUsers  false, :default => "" t.string :encrypted_password, :null => false, :default => "" ## Recoverable t.string :reset_password_token t.datetime :reset_password_sent_at ## Rememberable t.datetime :remember_created_at ## Trackable t.integer :sign_in_count, :default => 0 t.datetime :current_sign_in_at t.datetime :last_sign_in_at t.string :current_sign_in_ip t.string :last_sign_in_ip t.timestamps end add_index :users, :email, :unique => true add_index :users, :reset_password_token, :unique => true end end 

我的角色迁移文件

 class CreateRoles < ActiveRecord::Migration def change create_table :roles do |t| t.string :name t.timestamps end end end 

我的连接表迁移文件

 class UsersHaveAndBelongToManyRoles  false do |t| t.references :role, :user end end def down drop_table :roles_users end end 

ERROR COMING是未定义的方法`each’表示“2”:String

2是所选角色的id

在像UserRole之间的has_and_belongs_to_many关系RoleUser对象上没有role_id

collection_select的第二个参数是您使用选择更新的属性,在您的情况下,它不是role_id ,它是role_ids并且看到它是一个has_and_belongs_to_many关系,您可能希望允许用户选择多个选项,因此请尝试像这样的东西:

 <%= collection_select(:user, :role_ids, Role.all, :id, :name, {}, { selected: @user.role_ids, multiple: true }) %> 

如果将其附加到@user对象上的form_for ,则可以使用:

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