我正在使用 rails 3.2.3 并在我的应用程序中获取奇怪的值。
我有 2 个模型,一个用户和角色,它们是 has_and_belongs_to_many 关系。中间表是使用 role_id 和 user_id 列以及正确的名称 (roles_users) 创建的。
问题是,当我将用户分配给一个角色(通过复选框创建时)然后查看所有具有与其相关联的角色的用户时,我得到无效的角色 ID(如 75216410,当它应该只是 1 或 2 时)和角色名称只是“角色”而不是管理员。
我想使用 Devise 和 CanCan,我已经设置了 Devise,但是这件事让我无法继续。
我的角色和用户控制器具有传统的 restfull 操作,与我们在脚手架时获得的完全相同。而且由于数据库值是正确的,我相信这不是问题。
我的模型是:
用户.rb
class User < ActiveRecord::Base
# Devise modules
# :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable, :registerable
devise :database_authenticatable, :recoverable, :rememberable, :trackable, :validatable
#relationships
has_and_belongs_to_many :roles
#nested attr
accepts_nested_attributes_for :roles
# Accessible (or protected) attr
attr_accessible :username, :email, :password, :password_confirmation, :remember_me, :role_ids
# attr_accessible :title, :body
#validations
validates :username, :presence => true
validates :username, :email, :uniqueness => true
end
角色.rb
class Role < ActiveRecord::Base
has_and_belongs_to_many :users
attr_accessible :name, :user_attributes, :role_id
end
我的用户和角色视图与您通过脚手架获得的视图相同。我的用户索引:
<% @users.each do |user| %>
<tr>
<td><%= user.username %></td>
<td><%= user.email %></td>
<td><%= user.roles.id %></td> #should display "1"
<td><%= user.roles.name %></td> #should display "admin"
<td><%= link_to 'Show', user %></td>
<td><%= link_to 'Edit', edit_user_path(user) %></td>
<td><%= link_to 'Destroy', user, :confirm => 'Are you sure?', :method => :delete %></td>
</tr>
<% end %>
问题是,这会显示一些随机数,例如 69067380,而不是角色 id (1)。如果我刷新,这个数字会变成另一个随机数。至于角色名称,它总是说“角色”而不是“管理员”。这让我想起了一个指针内存地址,但我怀疑是这样。
注意:当我使用 MySQL 工作台检查表时,一切都很好,表中的所有值都是正确的。
任何帮助表示赞赏,在此先感谢