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.
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
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
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