2012-01-05 136 views
1

我試圖創建類UserBenefit之間的HABTM關係。問題是用戶和好處有多個關係,所以我試圖給這個關係一個獨特的名字,FavoriteBenefitizationHABTM與自定義關係名稱的關係

不幸的是,當我做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

FavoriteBenefitization是一個連接表,因此您應該使用user_id和benefit_id作爲列名。在你的其他車型,你可以做花哨的東西如重命名協會,範圍,或通過識別外鍵和類創建新的等

例如,我有這個在我的消息模型:has_one :recipient, :foreign_key => "id", :primary_key => "receiver_id", :class_name => "User"

但Rails的期望連接表列符合它的期望。

編輯:Rails期望這是因爲您正在使用:通過它來標識連接表。