У меня есть модели для пользователей и сайтов с has_many через связь между ними.В таблице присоединения sites_users
есть одна дополнительная часть данных is_default
, которая имеет тип boolean с намерением разрешить каждому пользователю иметь один сайт по умолчанию из списка связанных сайтов для этого пользователя.
модель пользователя
class User < ApplicationRecord
has_many :sites_users
has_many :sites, through: :sites_users
accepts_nested_attributes_for :sites_users, allow_destroy: true
...
end
фабрика пользователя
factory :user do
sequence(:email) { |n| "user_#{n}@example.com" }
role { Role.find_by(title: 'Marketing') }
image { Rack::Test::UploadedFile.new(Rails.root.join('spec', 'support', 'fixtures', 'user.jpg'), 'image/jpeg') }
factory :super_admin do
role { Role.find_by(title: "Super Admin") }
admin true
end
before :create do |u|
u.sites_users.build(site: site, is_default: true)
end
конец
фабрика альтернативного пользователя Подход
На фабрике пользователя я также попробовал этот метод, включенныйниже, но не может найти способ включить is_default: true
, используя этот синтаксис.Поэтому я отказался от этого метода в пользу вышеупомянутого before_create
вызова.
factory :user do
...
site { site }
...
end
Я был бы очень признателен за любую помощь, которую кто-либо мог оказать.Спасибо!
информация о схеме
таблица: пользователи
t.string "email", default: "", null: false
t.boolean "admin", default: false
t.integer "role_id"
t.string "first_name"
t.string "last_name"
таблица: сайты
t.string "domain", default: "", null: false
t.string "name", default: "", null: false
t.string "logo"
t.string "logo_mark"
таблица: sites_users
t.bigint "site_id", null: false
t.bigint "user_id", null: false
t.boolean "is_default", default: false