2017-10-03 2 views
0

Faire une jointure ActiveRecord dans RoR semble fonctionner si je regarde le SQL généré. Mais ce que je ne peux pas comprendre, c'est pourquoi le résultat de ce SQL n'est pas retourné dans la variable. Ce que je fais est:ActiveRecord Joint le résultat

class Book < ActiveRecord::Base 
    has_many :readings, dependent: :destroy 
    has_many :readers, :through => :readings 
    accepts_nested_attributes_for :readings 
end 

class Reader < ActiveRecord::Base 
    has_many :readings, dependent: :destroy 
    has_many :books, :through => :readings 
    accepts_nested_attributes_for :books 
end 

class Reading < ActiveRecord::Base 
    belongs_to :reader 
    belongs_to :book 
end 

Maintenant, lorsque vous demandez:

result = Reading.where(:reader_id => rid,).joins(:book).select(columns.collect{|c| c[:name]}.join(',')).flatten 

Il montre le SQL généré correct:

SELECT readings.id,books.title,books.author,readings.when FROM `readings` INNER JOIN `books` ON `books`.`id` = `readings`.`book_id` WHERE `readings`.`reader_id` = 2 

MAIS: la variable de résultat ne contient que les valeurs de l'enregistrement de lecture, PAS les champs de la table jointe.

Qu'est-ce qui me manque?

+0

mon cher ami, il ne s'affiche pas lorsque vous voyez la variable résultat. mais vous pouvez accéder aux colonnes de book.check une fois – krishnar

Répondre

0

J'ai fait les changements d'association en question aussi: -

class Book < ActiveRecord::Base 
    has_many :readings, dependent: :destroy 
    has_many :readers, :through => :readings 
    accepts_nested_attributes_for :readings 
end 

class Reader < ActiveRecord::Base 
    has_many :readings, dependent: :destroy 
    has_many :books, :through => :readings 
    accepts_nested_attributes_for :books 
end 

class Reading < ActiveRecord::Base 
    belongs_to :reader 
    belongs_to :book 
end 

requête dans la façon suivante: -

reader = Reader.find(rid) 
result = reader.books.pluck(:name).join(',') 
+0

Eh bien, peut-être que je dois ajouter que choisir cette forme de sélection parce que je l'utilise dans un assistant qui crée une table sur les résultats. Passer l'assistant un tableau de colonnes et un tableau de données qui contient les données réelles. J'ai donc besoin de toutes les données d'un tableau. – GTeley

0

En fin de compte, j'ai réécrite ma classe d'aide et alla chercher les différents champs J'avais besoin d'eux. (comme krishnar suggéré) Quoi qu'il en soit: Merci à vous pour vos contributions.