2012-04-27 9 views
1

私はレール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ワークベンチを使用してテーブルをチェックすると、すべてが正常であり、テーブル内のすべての値が正しいことになります。

すべてのヘルプは高く評価され、感謝事前に

答えて

2

あなたのユーザーには、多くの役割を持っているuはuser.rolesを発射するときので、それは最初role.youを表示user.roles.first.try(:name)user.roles.firstを試すか、代わりに単一のレコードの配列を与える役割を反復することができますあなたの要件に応じてそれらを表示します。

+0

結局のところ私は関係について混乱しているようです。 1から多くの方が良いかもしれませんが、とにかく説明に感謝します。 – Silver

1

user.roles.idはリレーション自体のIDです。 user.roles.fist.idなどを使用して、役割の1つを選択する必要があります。 1人のユーザーは多くの役割を持つことができ、すべてを1サイクルで印刷したいと考えています。

+0

説明もありがとう。 – Silver

関連する問題