1

私はRubyの初心者であり、 has_many :through 関連付けに問題があります。私のシステムは現在、Authlogic と Declarative_auth でセットアップされています。ユーザーをファイルすると、送信時に渡されていることが示されていても、ユーザーテーブルに role_id が挿入されないことを除いて、すべてが正しく作成されます。また、id を割り当てテーブルに保存しません。まず最初に、users テーブルに role_id が必要なのかという疑問があると思います。次に、割り当てテーブルの user_id および role_id フィールドをforeign_keyとして宣言する必要がありますか、それともレールはこれを自動的に処理しますか? これについて何か助けていただければ幸いです。

class User < ActiveRecord::Base
  acts_as_authentic
  has_many :assignments
  has_many :roles, :through => :assignments

  def role_symbols
    roles.map do |role|
      role.name.underscore.to_sym
    end
  end
end

class Role < ActiveRecord::Base
  has_many :assignments
  has_many :users, :through => :assignments
end

class Assignment < ActiveRecord::Base
  belongs_to :user
  belongs_to :role
end
4

1 に答える 1

0

users テーブルでも role_id は必要ですか?

いいえ、role_id 列は割り当てテーブルにのみ存在する必要があります。この場合、users テーブルはまったく更新されず、割り当てのみが更新されます。おそらく、指定された role_id と user_id を使用して新しい割り当てを作成する必要があります。

割り当てテーブルの user_id および role_id フィールドをforeign_keyとして宣言する必要がありますか?それともレールはこれを自動的に処理しますか?

Rails では、DB レベルの制約は必要ありません。Rails が関連付けを処理するために必要なのは、関連付けの宣言自体と、対応するテーブル内の対応する id 列の存在だけです。

この Railscastは has_many :through の良い入門書です。

于 2010-08-16T20:26:52.203 に答える