【发布时间】:2013-08-30 18:21:12
【问题描述】:
我有 3 个模型。 Rom::Favorite、Rom::Card、User。我在创建 User has_many rom_cards through rom_favorites
这是我的模型的相关部分
Rom::Card
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
Rom::Favorite
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 的事实有关。但我可能是错的,不太确定。
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-3 associations