2013-07-09 4 views
0

J'essaye d'obtenir ce qui devrait être une jointure de table de base pour fonctionner. C'est la première fois que je travaille avec des bases de données, il y a de fortes chances pour que je manque quelque chose de simple. J'utilise Rails 3.2.13.Simple Rails Join Exemple

J'ai deux tables. Le premier est les flux, et il contient une liste de flux rss et plusieurs autres caractéristiques comme une balise. La seconde est feed_entries et contient des histoires individuelles. La colonne feed_entries.feed_name correspond aux éléments de la colonne feeds.name. Voici les fichiers de modèle:

class Feed < ActiveRecord::Base 
    attr_accessible :color, :lastUpdated, :name, :posted, :read, :tag, :url 
    has_many :feed_entries, foreign_key: "feed_name", primary_key: "name" 
end 

class FeedEntry < ActiveRecord::Base 
    attr_accessible :guid, :name, :published_at, :status, :summary, :url 
    belongs_to :feed, foreign_key: "name", primary_key: "name" 
end 

Je ne comprends pas foreign_key et primary_key, mais en fonction de ce que je l'ai lu, je pense qu'ils sont mis en place correctement.

Actuellement, je peux présenter toutes les entrées d'un certain flux avec FeedEntry.where (feed_name: 'BBC') ou similaire. J'essaie de présenter les entrées qui correspondent à certaines colonnes dans la table des flux, comme tag = Daily. J'ai essayé ces commandes:

Feed.joins(:feed_entries).where("feed_entries.tag = ?", 'Daily') #error 
FeedEntry.joins(:feed).where("feeds.tag = ?", 'Daily') #empty 
Feed.joins(:feed_entries).where(tag: 'Daily') #no columns from feed_entries 

La première donne une erreur car il n'y a pas feed_entries.tag (c'est une colonne dans les aliments). La seconde ne renvoie aucune entrée. Le troisième renvoie le nombre correct d'entrées, mais seulement les colonnes présentes dans la table de flux, pas la plus importante table feed_entries.

Quelqu'un peut-il expliquer ce qui me manque?

Répondre

1

un problème que je peux repérer est sur la relation elle-même. Jetez un oeil à votre modèle FeedEntry ...

belongs_to :feed, foreign_key: "name", primary_key: "name" 

... la clé étrangère doit être 'FEED_NAME'

belongs_to :feed, foreign_key: "feed_name", primary_key: "name" 

Hope this helps!