2011-01-02 12 views
4

Ich möchte accepts_nested_attributes_for verwenden, um ein Artikelobjekt zu erstellen, das has_many Abschnitte.accresents_nested_attributes_for verursacht SQLException

class Article < ActiveRecord::Base 
    has_many :sections, :order => "position", :dependent => :destroy 
    belongs_to :categories 
    accepts_nested_attributes_for :sections, :allow_destroy => true, :reject_if => lambda { |attributes| attributes['title'].blank? } 
    validates_presence_of :name, :on => :create, :message => "An article must have a title" 
end 

class Section < ActiveRecord::Base 
    belongs_to :article 
    acts_as_list :scope => "article" 
    has_attached_file :image, 
        :styles => { :medium => "300x300>", 
           :thumb => "100x100>" } 
end 

Immer wenn der :reject_if Zustand das verschachtelte Attribut akzeptiert (wenn das title Attribut ist nicht blank?) Ich sehe eine SQLException. Andernfalls wird der Artikel erfolgreich ohne die zugehörigen Abschnitte erstellt.

Parameters: {"article"=>{"name"=>"My Article", "category_id"=>"7", "sections_attributes"=>{"0"=>{"title"=>"Section 1", "content"=>"Section 1 of my new article"}}}} 

AREL (30.3ms) INSERT INTO "articles" ("content", "category_id", "position", "name") VALUES (NULL, 7, NULL, 'My Article') 

Section Load (0.4ms) SELECT "sections".* FROM "sections" WHERE (article) ORDER BY position DESC LIMIT 1 

SQLite3::SQLException: no such column: article: SELECT "sections".* FROM "sections" WHERE (article) ORDER BY position DESC LIMIT 1 
Completed in 68ms 

Ich versuche herauszufinden, was während der Section Load Bühne falsch läuft, da WHERE (article) ist unerwartet. Danke fürs Lesen.

+0

Beachtenswert: Ich habe das gleiche Problem mit zwei anderen unabhängigen Modellen mit der gleichen Eins-zu-viele-Beziehung. Ich verwende Rails 3.0.3 – grough

+0

Ich gehe davon aus, dass die Modellassoziationen von der Konsole aus funktionieren? Versuchen Sie geschachtelte Attribute von der Konsole und versuchen Sie auch, Ihre Assoziationen/accept_nested-Deklarationen, KISS, zu vereinfachen. – thomasfedb

+0

Das Ausführen von 'Article.create! ({: Name =>" Konsolentest ",: sections_attributes => [{: title =>" Abschnitt 1.1 "}]}) in der Konsole führt zu derselben SQLException. Ich habe versucht, die accept_nested-Deklaration auf ihre einfachste Form zu reduzieren und nur den verschachtelten Modellnamen anzugeben. Wie in der Frage angegeben, funktioniert alles, wenn die Bedingung ': reject_if' fehlschlägt oder überhaupt nicht deklariert wird. Der Fehler tritt nur auf, wenn das verschachtelte Objekt akzeptiert wird. – grough

Antwort

1

Ihr Problem hier ist Ihre acts_as_list :scope => "article" Anruf, wie the acts_as_list docs, wenn Sie eine Zeichenfolge angeben, dann das Juwel betrachtet, dass SQL, die es buchstäblich verwenden wird. Sie wollten :article hier verwenden - das teilt acts_as_list mit, die :article Verbindung zu verwenden.

Verwandte Themen