[英]Rails: has_many through not returning correctly with namespaced models
我有3個型號。 Rom::Favorite
, Rom::Card
, User
。 我在User has_many rom_cards through rom_favorites
創建User has_many rom_cards through rom_favorites
時遇到問題
這是我模型的相關部分
羅::卡
class Rom::Card < ActiveRecord::Base
has_many :rom_favorites, class_name: "Rom::Favorite", foreign_key: "rom_card_id", dependent: :destroy
self.table_name = "rom_cards"
end
用戶
class User < ActiveRecord::Base
# Setup accessible (or protected) attributes for your model
attr_accessible :email, :password, :password_confirmation, :remember_me, :role
has_many :rom_favorites, class_name: "Rom::Favorite", dependent: :destroy
has_many :rom_cards, class_name: "Rom::Card", through: :rom_favorites, class_name: "Rom::Favorite"
end
羅::收藏
class Rom::Favorite < ActiveRecord::Base
attr_accessible :rom_card_id, :user_id
belongs_to :user
belongs_to :rom_card, class_name: "Rom::Card"
validates :user, presence: true
validates :rom_card, presence: true
validates :rom_card_id, :uniqueness => {:scope => :user_id}
self.table_name = "rom_favorites"
end
所有與協會一起使用的實用方法除外
a = User.find(1)
a.rom_cards
調用a.rom_cards
返回一個空數組,它似乎運行此SQL查詢
SELECT "rom_favorites".* FROM "rom_favorites" INNER JOIN "rom_favorites" "rom_favorites_rom_cards_join" ON "rom_favorites"."id" = "rom_favorites_rom_cards_join"."rom_card_id" WHERE "rom_favorites_rom_cards_join"."user_id" = 1
我在SQL方面不強,但我認為這似乎是正確的。
我知道a.rom_cards
應該返回2張牌,因為a.rom_favorites
返回2個收藏夾,而那些收藏夾中存在card_id。
應該允許rom_cards
的調用如下
has_many :rom_cards, class_name: "Rom::Card", through: :rom_favorites, class_name: "Rom::Favorite"
我覺得這個問題與它試圖通過收藏夾找到用戶卡這一事實有關,它正在尋找card_id(因為我指定了類Rom :: Card)而不是rom_card_id。 但我可能是錯的,不完全確定。
您正在復制關聯哈希中的密鑰class_name
。 沒有必要編寫class_name: "Rom::Favorite"
因為通過使用class_name: "Rom::Favorite"
through: :rom_favorites
它將使用has_many :rom_favorites
的配置選項。
試試:
has_many :rom_cards, class_name: "Rom::Card", through: :rom_favorites
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.