1

У меня есть настройка, где я хочу, чтобы создать запись о роли, чтобы указать на навыки пользователей, места, постановки, группы и так далее.has_many через невидимые проверки?

я поставил его как есть много через отношения с все, что происходит, хотя роли и роли, принадлежащие всем, как так:

class Role < ApplicationRecord 
    belongs_to :user 
    belongs_to :skill 
    belongs_to :production 
    belongs_to :venue 
    belongs_to :project 
    belongs_to :group 
end 

и установить отдельные категории ролей, как так:

class Group < ApplicationRecord 
    has_many :users, through: :roles 
end 

Все те же, за исключением пользователей, которые, конечно, имеют множество деталей для модели.

Каждая таблица имеет поле имени и поле id, а также стандартные поля метки времени.

Я установил его для индексирования имен для каждой таблицы.

Когда я пытаюсь создать роль в качестве записи с помощью только role_id, user_id и skill_id, я возвращаю ошибки в консоли, говоря, что мне нужны значения для всего.

Означает ли это, что мне нужно построить has_many через отношения для каждого типа роли с его собственным «сквозным»? Или может ли кто-нибудь заглянуть в таблицу, как я себе представляю? И почему он пытается проверить наличие данных для каждого поля? Это будет связано с индексацией?

Если бы я хотел отменить эту проверку, я даже не знаю, где разместить код, так как я не уверен, откуда происходит валидация.

ответ

1

Поведение Rails 5 по умолчанию является принадлежностью к тому, что родительская ассоциация должна присутствовать, поэтому да, для сохранения роли вам понадобятся все поля.

Однако, чтобы отключить это поведение, изменение:

# config/initializers/new_framework_defaults.rb 
Rails.application.config.active_record.belongs_to_required_by_default = false 
# this would disable this configuration for the entire application 

UPDATE

Другой подход, чтобы выяснить наиболее важные ассоциации и обеспечить таковые имеются, и установить дополнительный тег на дополнительных ассоциациях, например:

+1

это не позволит мне продвигать вас, потому что я грязный NOOB, но спасибо! followup: Должен ли я моделировать это по-другому? – Jeremy

+0

Обновлен ответ, чтобы добавить необязательный флаг. Я думаю, что это может быть лучший подход. – oreoluwa

+0

Если вы не можете повышать, вы можете принять ответ, если он решает вашу проблему. – oreoluwa

Смежные вопросы