0

こんにちは、2 つのモデル間で多対多の関係を確立するためのフォームを作成しています

このソリューションを使用して

私は3つのモデルを持っています

アーティスト、記事、アーティスト関係。

アーティストモデルです。

 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モデルです

 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: order 句の列 'created_at' があいまいです: SELECT 1 AS one FROM artistsINNER JOIN artist_relationshipsON artists. id= artist_relationships. artist_idどこartist_relationshipsで。article_id= 1 AND artists. id= 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 に答える