0

UsersRolesの 2 つのモデルがあります。それらは次のように関連付けられています。

user.rb

...
has_and_belongs_to_many :roles
...

role.rb

...
has_and_belongs_to_many :users
...

したがって、ユーザーは多くの役割を持つことができ、役割は多くのユーザーに関連付けることができます。

ロールのデフォルト値を設定するために (各ユーザーには少なくとも 1 つのロールを作成する必要があるため)、seed.rbファイルに次のコードを追加し、 db:seedコマンドを実行しました。

roles = [
    Admin: 'test',
    Student: 'test'
]

roles.each do |role, description|
  SecurityUsersRole.find_or_create_by_role_and_description(role,description)
end

ロールは作成されましたが、破棄できません。次のエラー メッセージが返されます。

ActiveRecord::StatementInvalid at /security_users_roles/2

ActiveRecord::JDBCError: DB2 SQL Error: SQLCODE=-204, SQLSTATE=42704,
SQLERRMC=DB2INST1.SECURITY_USERS_SECURITY_USERS_ROLES, DRIVER=3.65.77: 

SELECT security_users.* 
FROM security_users 
INNER JOIN security_users_security_users_roles 
  ON security_users.id = security_users_security_users_roles.security_user_id 
WHERE security_users_security_users_roles.security_users_role_id = 2

まだユーザーを作成しておらず、ロールに関連付けていないため、上記のステートメントはレコードを返さないはずです。

誰が私が間違っているのか教えてもらえますか?

4

1 に答える 1

0

公式ドキュメントのこのセクションの最後には、次のように書かれています。

最も簡単な経験則は、リレーションシップ モデルを独立したエンティティとして操作する必要がある場合は、has_many :through リレーションシップを設定する必要があるということです。リレーションシップ モデルで何もする必要がない場合は、has_and_belongs_to_many リレーションシップを設定する方が簡単かもしれません(ただし、データベースに結合テーブルを作成することを覚えておく必要があります)

そして、それが問題の原因でした-結合テーブルを作成していません。この中間結合テーブルの作成方法の詳細が必要な場合は、Rails が中間テーブルを作成していないことを確認してください。- 習慣関係

于 2013-06-25T16:00:05.160 に答える