[英]Rails: has_many through not returning correctly with namespaced models
I have 3 models. 我有3个型号。
Rom::Favorite
, Rom::Card
, User
. Rom::Favorite
, Rom::Card
, User
。 I am having an issue creating the User has_many rom_cards through rom_favorites
我在
User has_many rom_cards through rom_favorites
创建User has_many rom_cards through rom_favorites
时遇到问题
Here are my relevant parts of my models 这是我模型的相关部分
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
User 用户
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
All of the utility methods that come along with associations work except 所有与协会一起使用的实用方法除外
a = User.find(1)
a.rom_cards
The call a.rom_cards
returns an empty array and it seems to run this SQL query 调用
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
I am not strong in SQL, but I think this seems correct. 我在SQL方面不强,但我认为这似乎是正确的。
I know a.rom_cards
should return 2 cards because a.rom_favorites
returns 2 favorites, and in those favorites are card_id's that exist. 我知道
a.rom_cards
应该返回2张牌,因为a.rom_favorites
返回2个收藏夹,而那些收藏夹中存在card_id。
The call that should allow rom_cards
is the following 应该允许
rom_cards
的调用如下
has_many :rom_cards, class_name: "Rom::Card", through: :rom_favorites, class_name: "Rom::Favorite"
I feel like the issue has something to do with the fact that it is trying to find the Users cards through favorites and it is looking for card_id (because I specified the class Rom::Card) instead of rom_card_id. 我觉得这个问题与它试图通过收藏夹找到用户卡这一事实有关,它正在寻找card_id(因为我指定了类Rom :: Card)而不是rom_card_id。 But I could be wrong, not exactly sure.
但我可能是错的,不完全确定。
You are duplicating the key class_name
in the association hash. 您正在复制关联哈希中的密钥
class_name
。 There is no need to write class_name: "Rom::Favorite"
because by using through: :rom_favorites
it will use the configuration options of has_many :rom_favorites
. 没有必要编写
class_name: "Rom::Favorite"
因为通过使用class_name: "Rom::Favorite"
through: :rom_favorites
它将使用has_many :rom_favorites
的配置选项。
Try with: 试试:
has_many :rom_cards, class_name: "Rom::Card", through: :rom_favorites
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.