Ho 3 modelli. Rom::Favorite
, Rom::Card
, User
. Sto avendo un problema creando la User has_many rom_cards through rom_favorites
Rails: has_many attraverso non si restituisce correttamente con i modelli di namespace
qui sono le mie parti rilevanti dei miei modelli
Rom :: carte
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
utente
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: : Preferito
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
Tutti i metodi di utilità che vengono con le associazioni lavorano tranne
a = User.find(1)
a.rom_cards
La chiamata a.rom_cards
restituisce un array vuoto e sembra per eseguire la query 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
Io sono non forte in SQL, ma penso che questo sembra corretto.
So che a.rom_cards
deve restituire 2 carte perché a.rom_favorites
restituisce 2 preferiti e in quei preferiti sono card_id che esistono.
La chiamata che dovrebbe consentire rom_cards
è il seguente
has_many :rom_cards, class_name: "Rom::Card", through: :rom_favorites, class_name: "Rom::Favorite"
mi sento come il problema ha a che fare con il fatto che si sta cercando di trovare le schede utenti attraverso favoriti ed è alla ricerca di card_id (perché ho specificato la classe Rom :: Card) anziché rom_card_id. Ma potrei sbagliarmi, non esattamente sicuro.
grazie. ha funzionato perfettamente! – user2158382
Qualche idea quando la classe through è in un namespace ??. Ad esempio: 'has_many: rom_cards, class_name:" Rom :: Card ", attraverso:: namespaced_rom_favorites'. – CristianOrellanaBak