Рельсы has_many: посредством проверки

Я испытываю затруднения при утверждении модели от has_many до ассоциации. Ниже соответствующие модели:

Модель Вещания

class Broadcast < ActiveRecord::Base

    attr_accessible :content,
                    :expires,
                    :user_ids,
                    :user_id

    has_many :users, through: :broadcast_receipts
    has_many :broadcast_receipts, dependent: :destroy

    validates :user_id, presence: true
    validates :content, presence: true

end

Модель Квитанции Вещания

class BroadcastReceipt < ActiveRecord::Base

    belongs_to :broadcast
    belongs_to :user

    attr_accessible :user_id, :cleared, :broadcast_id

    validates :user_id      , presence: true
    validates :broadcast_id         , presence: true
end

Есть также связь с Пользователями, которых передачи have_many письменно подтверждают получение через квитанции вещания.

Проблема, кажется, со следующей линией:

validates :broadcast_id         , presence: true

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

Это похоже на проблему с Передачей, не спасаемой, прежде чем Квитанции Вещания будут созданы.
Есть ли какой-либо способ, которым я был бы в состоянии утвердить broadcast_id, установлен на модели квитанции?

2
nl ja de
Можно создать нестандартный элемент верификации, что-то как: утверждает: broadcast_id_exists и регистрация вашей проверки, если передача существует в DB.
добавлено автор Kaeros, источник

2 ответы

Это, кажется, тот же самый вопрос, обсуждаемый здесь: https://github.com/rails/rails/issues/8828, который был решен, добавив: инверсия к has_many ассоциациям к модели соединения.

2
добавлено

В вашем кодовом структурировании могла бы быть некоторая проблема. Вы могли дать этой версии попытку.

class Broadcast < ActiveRecord::Base
  # I assume these are the recipients
  has_many :broadcast_receipts, dependent: :destroy
  has_many :users, through: :broadcast_receipts

  # I assume this is the creator
  validates :user_id, :content, presence: true
  attr_accessible :content, :expires, :user_id, :user_ids
end

class BroadcastReceipt < ActiveRecord::Base
  belongs_to :broadcast
  belongs_to :user

  # You should be able to validate the presence
  # of an associated model directly
  validates :user, :broadcast, presence: true

  attr_accessible :cleared
end
1
добавлено
Я добираюсь, почему это должно работать, но это все еще doesn' t, это откатывается назад без ошибок. Интересная вещь состоит в том, что это раньше работало прежде, чем модернизировать до Рельсов 3.2.11, но меня can' t находят что-либо в журналах изменений, которые заставили бы его прекращать работать. It' s, все еще пытаясь сохранить квитанцию, прежде чем передача на самом деле экономится, таким образом, у этого нет broadcast_id, чтобы пройти в.
добавлено автор Ammar, источник
pro.ruby
pro.ruby
1 181 участник(ов)

Язык программирования Ruby Additional docs: https://rubyreferences.github.io/rubyref/ Invite: https://telegram.me/joinchat/Be4rsT2NuB3CyJaF26j1kA Кто хочет компилировать: @crystal_ru (его синтаксис основан на Ruby) Участник @proDOT

Ruby, Rails, Hanami | dry-rb
Ruby, Rails, Hanami | dry-rb
1 180 участник(ов)

https://telegram.me/rubyjob - Ruby Job По вопросам - @eugene_shved

Ruby School .us
Ruby School .us
1 045 участник(ов)

Чат-болталка для учеников руби-школы и не только. Правила: https://telegra.ph/Pravila-chata-Rubi-shkoly-03-13

Random Ruby Chat
Random Ruby Chat
589 участник(ов)

Правила публикации вакансий: https://t.me/codenamecrud/60865

Rubyata
Rubyata
333 участник(ов)

Коммюнити Ruby и Ruby On Rails Флуд не приветствуются. Вакансии можно публиковать только и ТОЛЬКО по пятницам с хештегом #вакансия.

Ruby Talks
Ruby Talks
236 участник(ов)

Национальная Флеймотека

RubyRush
RubyRush
189 участник(ов)

rubyrush.ru программирование для самых новичков

Rails Chat
Rails Chat
87 участник(ов)

You are welcome to discuss Ruby On Rails development process and other stuff