0

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

使用此解决方案

我有三个模型

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

这是艺术家模型。

 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

这是艺术家关系模型

 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::Error: 列 'created_at' 在 order 子句中不明确: SELECT 1 AS one FROM artistsINNER JOIN artist_relationshipsON artistsid= artist_relationshipsartist_id在哪里artist_relationshipsarticle_id= 1 和artistsid= 2 ORDER BY created_at DESC LIMIT 1

看不懂是什么意思。。

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

 <%= check_box_tag :artist_ids, artist.id, article.artists.include?(artist), :name => 'article[artist_ids][]' %>

当我直接调用时在撬控制台中article.artists.include?(artist)

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

当我调用 article.artists它时,它会返回一个属于该文章的艺术家数组

然后我article.artists.include?(artist)再次打电话。我工作正常。

这有什么问题?

4

1 回答 1

1

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

# article.rb
default_scope order('articles.created_at DESC')
于 2013-02-06T10:37:11.040 回答