私はUser
とRole
の間に多くのタムを持っています。ここに私のスキーマは次のとおりです。SCOPED関連でActiveRecordオブジェクトを保存するにはどうすればいいですか?
ActiveRecord::Schema.define(version: 20161022143228) do
create_table "roles", force: :cascade do |t|
t.string "name"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "roles_users", force: :cascade do |t|
t.integer "user_id"
t.integer "role_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "type_of"
t.index ["role_id"], name: "index_roles_users_on_role_id"
t.index ["user_id"], name: "index_roles_users_on_user_id"
end
create_table "users", force: :cascade do |t|
t.string "name"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
end
そして、ここでは私の団体のすべてです:
役割
class Role < ApplicationRecord
has_many :dev_roles_users, -> { dev }, class_name: 'RolesUser'
has_many :admin_roles_users, -> { admin }, class_name: 'RolesUser'
has_many :dev_users, through: :dev_roles_users, class_name: 'User', source: :user
has_many :admin_users, through: :admin_roles_users, class_name: 'User', source: :user
end
ユーザー
class User < ApplicationRecord
has_many :dev_roles_users, -> { dev }, class_name: 'RolesUser'
has_many :admin_roles_users, -> { admin }, class_name: 'RolesUser'
has_many :dev_roles, through: :dev_roles_users, class_name: 'Role', source: :role
has_many :admin_roles, through: :admin_roles_users, class_name: 'Role', source: :role
end
RolesUse R Iは、次の操作を実行しようとrails c
で
class RolesUser < ApplicationRecord
belongs_to :user
belongs_to :role
scope :admin, -> { where(type_of: 'admin') }
scope :dev, -> { where(type_of: 'dev') }
enum type_of: ['admin', 'dev']
end
:
r = Role.create(name: 'super_secret_admin')
u = User.new(name: 'john')
u.admin_roles << r
u.save
最後の行は、ロールバックが発生します。私は最初のユーザーを保存する場合は
u.errors
が@messages={:dev_roles_users=>["is invalid"]}
を与え、それが動作します:
r = Role.create(name: 'super_secret_admin')
u = User.create(name: 'john')
u.admin_roles << r
u.save
クレイジーなことは、以下のセットアップは、仕事上のコードのすべての行を作るされていることを!ユーザーは、「保留中の」関連付けを使用して同時に保存されます。
上記と同じで、ここで私の団体のすべてである:ここで
は私のスキーマでは
役割
class Role < ApplicationRecord
has_and_belongs_to_many :users
end
ユーザー
class User < ApplicationRecord
has_and_belongs_to_many :roles
end
rails c
私は今、次の操作を行うことができます
r = Role.create(name: 'super_secret_admin')
u = User.new(name: 'john')
u.roles << r
u.save
誰でもスコープ団体を動作させる方法について説明していただけますか?私は、同じ形式で多くの役割を持つユーザーを作成する必要があります。
UPDATE 私の役割のアーキテクチャを設計する方法についてのアドバイスや提案をいただき、ありがとうございます。残念ながら私はそれに興味がありません。私たちがこの問題に直面しているアプリには役割はありません。だから私はもっと明確にして、質問は:
私はどのように私は、ユーザーに関連付けを割り当てることができます(同時にその "保留中"の関連付けと "その関連がスコープを使用して構築されている場合) /ラムダ?
http://stackoverflow.com/questions/40228134/how-to-use-inverse-of-with-multiple-associations?noredirect=1#comment67723540_40228134 – Claudio