2013-06-04 3 views
0

Dans ma base de données, j'essaie d'obtenir une relation un à plusieurs entre les points de vente et les articles.
Je reçois l'erreur suivante lorsque cette relation est utilisée:Rails Méthode non identifiée Problème: méthode non définie `outlet_id '

undefined method `outlet_id' for #<Article:0x007fc353887e58> 

Voici les modèles:

class Article < ActiveRecord::Base 
     belongs_to :analyst 
     belongs_to :outlet 
     has_and_belongs_to_many :loe 
     attr_accessible :article_body, :author, :distribution, :loe, :most_important, :pubdate, :publication, :state, :submitted, :summary, :title, :url, :analyst_id, :loe_ids, :outlet_id 
    end 

    class Outlet < ActiveRecord::Base 
     has_many :articles, foreign_key: :title 
     attr_accessible :distribution, :name, :state, :article_ids 
    end 

Voici le schéma:

create_table "articles_loes", :id => false, :force => true do |t| 
    t.integer "article_id" 
    t.integer "loe_id" 
    end 

    create_table "loes", :force => true do |t| 
    t.string "name" 
    t.string "customer" 
    t.integer "article_id" 
    t.datetime "created_at", :null => false 
    t.datetime "updated_at", :null => false 
    end 

    add_index "loes", ["article_id"], :name => "index_loes_on_article_id" 

    create_table "outlets", :force => true do |t| 
    t.string "name" 
    t.integer "articles_id" 
    t.integer "distribution" 
    t.string "state" 
    t.datetime "created_at", :null => false 
    t.datetime "updated_at", :null => false 
    end 

    add_index "outlets", ["articles_id"], :name => "index_outlets_on_articles_id" 

Et est ici la morceau de la vue qui fait appel :outlet:

<div class="span4"> 
    <%= f.association :loe %> 
    <%= f.association :outlet %> 
    </div> 

Si quelqu'un a des idées, je les apprécierais vraiment. Je pense que je pourrais avoir besoin d'un index des points de vente dans l'article? Je ne suis pas vraiment sûr de savoir comment l'appliquer si c'est le cas. Merci d'avance.

+0

Je pense que vous avez ajouté le "articles_id" à la table des points de vente par erreur. Vous devez avoir outlet_id dans la table des articles à la place. –

Répondre

2

À l'heure actuelle, votre modèle Outlet ne peut pas s'associer au articles. Une fois que vous dites belongs_to, vous devez avoir un outlet_idcolumn. Vous devez donc ajouter une colonne outlet_id (integer) à votre modèle Article et la remplir avec l'identifiant de la succursale à laquelle ils appartiennent. Si un article peut appartenir à plusieurs points de vente, vous devez créer une relation many-to-many via une table commune.