Ошибка аргумента: неизвестный ключ:: от

Я пытаюсь создавать сообщения в рельсах. Но когда я запускаю Message.new в консоли rails, я получаю:

ArgumentError: Unknown key: :from. Valid keys are: :class_name, :class, :foreign_key, :validate ... etc

Моя установка выглядит следующим образом:

Модель пользователя

  has_many :messages
  has_many :message_recipients, :as => :recipient, :dependent => :destroy
  has_many :received_messages, :through => :message_recipients

Модель сообщения

  belongs_to :user
  has_many :message_recipients, :dependent => :destroy
  has_many :recipients, :through => :message_recipients, :class_name => "User", :from => :recipient

Модель сообщения-получателя

  belongs_to :message
  belongs_to :recipient, :class_name => "User", :foreign_key => :recipient_id

Спасибо за любой совет или помощь.

3 ответа

Решение

Это говорит вам, что :from недопустимый параметр в этой строке:

has_many :recipients, :through => :message_recipients, :class_name => "User", :from => :recipient

Вы должны просто быть в состоянии удалить эту часть.

Действительные параметры см. В документации по has_many,

ОБНОВИТЬ

В синтаксисе этой строки :from ключ в хэше опций has_many макро / метод. Но has_many Метод проверяет переданные параметры и предупреждает вас, если что-то, что вы передаете, неизвестно. Это то что :from будет - неизвестный вариант. Т.е. Rails понятия не имеет, что с этим делать. Так что это недействительно и просто не должно быть там.

В Message модель, определяя связь has_many с recipientsВы прошли :from опция, которая не является допустимым ключом для has_many метод, поэтому вы получаете ошибку как

ArgumentError: Unknown key: :from. Valid keys are: :class_name, :class, :foreign_key, :validate ... etc

В Message модель

has_many :recipients, :through => :message_recipients, :class_name => "User", 
         :from => :recipient
         ## ^^ 
         ## Remove this

Вот ссылка на все допустимые параметры, которые вы можете передать ассоциации has_many

:from не является допустимым параметром в отношении has_many, используемом в модели сообщений. Вот почему вы получаете проблему ошибки аргумента.

Другие вопросы по тегам