こんにちは、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
artists
INNER JOINartist_relationships
ONartists
.id
=artist_relationships
.artist_id
どこartist_relationships
で。article_id
= 1 ANDartists
.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)
再び電話します。私は元気に働いています。
これの何が問題なのですか?