在rails 3中构建多对多关系表单时出现奇怪的StatementInvalid错误

时间:2013-02-06 10:25:52

标签: ruby-on-rails rails-activerecord

您好我正在制作一个表格,用于建立两个模型之间的多对多关系

使用此solution

我有三个模特

艺术家,文章,艺术家关系。

这是艺术家模型。

 class Artist < ActiveRecord::Base
   default_scope order('created_at DESC')

   attr_accessible :body_en, :body_kr, :title_en, :title_kr

   has_many :articles, :through => :artist_relationships
   has_many :artist_relationships
 end

这是文章模型。

 class Article < ActiveRecord::Base
    default_scope order('created_at DESC')

    attr_accessible :title, :body, :date

    has_many :artists, :through => :artist_relationships
    has_many :artist_relationships

 end

这是ArtistRelationship Model

 class ArtistRelationship < ActiveRecord::Base
   default_scope order('created_at DESC')

   attr_accessible :article_id, :artist_id

   belongs_to :artist
   belongs_to :article

 end

现在我有一个表格来设置艺术家。

 <%= form_for [:admin, article] do |f| %>
   .....
     <% Artist.all.each do |artist| %>
        <div>
           <%= label_tag :artist_ids, artist.title_kr %>
           <%= check_box_tag :artist_ids, artist.id, article.artists.include?(artist), :name => 'article[artist_ids][]' %>
        </div>
     <% end %>

错误来自此处

 article.artists.include?(artist)

它引发了这些错误

  

Mysql2 ::错误:order子句中的'created_at'列不明确:SELECT 1 AS FROM artists INNER JOIN artist_relationships ON artistsid = {{ 1}}。artist_relationships WHERE artist_idartist_relationships = 1 AND article_idartists = 2 ORDER BY created_at DESC LIMIT 1

我无法理解它的意思..

当我在代码上方使用pry进行调试时会发生 weired 事情

id
当我直接拨打 <%= check_box_tag :artist_ids, artist.id, article.artists.include?(artist), :name => 'article[artist_ids][]' %>

时,在pry控制台中

它引起了我预期的相同错误。但

当我致电article.artists.include?(artist)时,它会返回属于该文章的艺术家数组

然后我再次致电article.artists。我工作得很好。

这有什么问题?

1 个答案:

答案 0 :(得分:1)

在所有默认范围内,包括类的表格化版本

# article.rb
default_scope order('articles.created_at DESC')