私はレール3.2.3を使用していて、私のアプリでは奇妙な値を取得しています。Ruby on Rails - NからNへの関係、奇妙な値
私はhas_and_belongs_to_many関係の2つのモデル、userとroleを持っています。中間テーブルは、role_idおよびuser_idカラムと正しい名前(roles_users)で作成されます。
私はロールに(チェックボックスによる作成時に)ユーザを割り当てて、それらに関連付けられたロールを持つすべてのユーザを表示すると、無効なロールIDを取得します(75216410はちょうど1または2 )、ロール名は単にadminではなく「Role」です。
私はDeviseとCanCanを使用したいと思いますが、私はDeviseを設定しましたが、このことは私が邪魔にならないようにします。
私の役割とユーザーのコントローラは、従来のrestfullアクションを備えています。私たちが足場をとったときとまったく同じものです。 DBの値は正しいので、これは問題ではないと私は信じています。
私のモデルは以下のとおりです。
user.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
role.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 %>
事があり、このディスプレイ、代わりの役割IDは、(1)、私が更新すると69067380.のようないくつかのランダムな番号は、この番号は別のランダムな番号に変更します。ロール名は「admin」ではなく「Role」と表示されます。 これは私にポインタメモリアドレスを思い出させますが、私はそれが事実であるとは思わない。
注:MySQLワークベンチを使用してテーブルをチェックすると、すべてが正常であり、テーブル内のすべての値が正しいことになります。
すべてのヘルプは高く評価され、感謝事前に
結局のところ私は関係について混乱しているようです。 1から多くの方が良いかもしれませんが、とにかく説明に感謝します。 – Silver