HABTM отношения с именами пользовательских отношений - PullRequest
1 голос
/ 06 января 2012

Я пытаюсь создать связь HABTM между классами User и Benefit. Проблема заключается в том, что пользователи и преимущества имеют несколько отношений друг с другом, поэтому я пытаюсь дать этим отношениям уникальное имя FavoriteBenefitization.

К сожалению, когда я делаю User.last.favorite_benefits Я получаю сообщение об ошибке:

ActiveRecord::StatementInvalid: Mysql2::Error: Unknown column 'favorite_benefitizations.user_id' in 'where clause': SELECT `benefits`.* FROM `benefits` INNER JOIN `favorite_benefitizations` ON `benefits`.`id` = `favorite_benefitizations`.`favorite_benefit_id` WHERE `favorite_benefitizations`.`user_id` = 6088

Вот код, который я использовал:

class FavoriteBenefitization < ActiveRecord::Base

  belongs_to :favorited_user, :class_name => 'User'
  belongs_to :favorite_benefit, :class_name => 'Benefit'

  validates :favorited_user, :favorite_benefit, :presence => true
end

class User < ActiveRecord::Base
  has_many :favorite_benefitizations,
    :dependent => :destroy

  has_many :favorite_benefits,
    :through => :favorite_benefitizations
end

class Beneift < ActiveRecord::Base
  has_many :favorite_benefitizations,
    :dependent => :destroy

  has_many :favorited_users,
    :through => :favorite_benefitizations
end

Это для приложения, использующего Rails 3.1

Любая помощь будет потрясающей. Спасибо!

1 Ответ

1 голос
/ 06 января 2012

FavoriteBenefitization - это таблица соединений, поэтому в качестве имен столбцов следует использовать user_id и выгоды_ид.В других ваших моделях вы можете делать необычные вещи, такие как переименование ассоциаций, областей или создание новых, идентифицируя внешние ключи и классы и т. Д. Например,

, у меня это есть в моей модели сообщений: has_one :recipient, :foreign_key => "id", :primary_key => "receiver_id", :class_name => "User"

Но Rails ожидает, что столбцы таблицы соединений будут соответствовать ее ожиданиям.

Редактировать: Rails ожидает этого, потому что вы используете: через который идентифицирует таблицу соединений.

...