accepts_nested_attributes_for causing SQLException

瘦欲@ 提交于 2020-01-23 08:00:27

问题


I would like to use accepts_nested_attributes_for to create an Article object that has_many Sections.

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

Whenever the :reject_if condition accepts the nested attribute (if the title attribute is not blank?) I see a SQLException. Otherwise the Article will be created successfully without the associated Sections.

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

I'm trying to figure out what's going wrong during the Section Load stage, since WHERE (article) is unexpected. Thanks for reading.


回答1:


Your problem here is your acts_as_list :scope => "article" call, as per the acts_as_list docs if you provide a string, then the gem considers that to be SQL which it will use literally. You wanted to use :article here - which tells acts_as_list to use the :article association.



来源:https://stackoverflow.com/questions/4579279/accepts-nested-attributes-for-causing-sqlexception

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!