0

HABTM と rails 3.2.11 の関連付けについて少し混乱しています。

私は画像モデルを持っています:

class Image < ActiveRecord::Base
  attr_accessible :description, :name, :image, :article_ids
  has_and_belongs_to_many :articles
end

そして記事モデル:

class Article < ActiveRecord::Base
  has_and_belongs_to_many :images
  attr_accessible :content, :name, :image_ids
end

移行を作成しました:

class CreateImagesArticlesTable < ActiveRecord::Migration
  def self.up
    create_table :images_articles, :id => false do |t|
        t.references :image
        t.references :article
    end
    add_index :images_articles, [:image_id, :article_id]
    add_index :images_articles, [:article_id, :image_id]
  end

  def self.down
    drop_table :images_articles
  end
end

それから私は db:migrate をかき集めました

画像を更新するときに、記事と画像を接続するためのチェックボックスを表示するようになりました。

%div
  - @articles.each do |article|
    = check_box_tag "article_ids[]", article.id
    = article.name

最初のチェックボックスをオンにして更新すると、関連付けを作成できません。エラーは次のとおりです。

ActiveRecord::StatementInvalid in ImagesController#update

Mysql2::エラー: テーブル 'project_development.articles_images' が存在しません: SELECT articles.* FROM articlesINNER JOIN articles_imagesON articles. id= articles_images. article_idどこarticles_imagesで。image_id= 78

パラメータは次のとおりです。

{"utf8"=>"✓", "_method"=>"put", "authenticity_token"=>"5qUu72d7asba09d7zbas7a9azsdas8a8dss", "image"=>{"name"=>"Test", "description"=>"Testdescription ", "article_ids"=>[]}, "article_ids"=>["1"], "commit"=>"更新イメージ", "id"=>"78-test"}

MySQL Workbench にテーブルが表示されますが、次のように表示されているため、調べることができません。

エラー: project_developmentimages_articles: テーブルに主キーが定義されていないため、テーブル データは編集できません

4

2 に答える 2

1

移行は間違っています。テーブル名は 2 つのモデル名の複数形を結合しますが、アルファベット順に並べられています。つまり、そうではありarticles_imagesませんimages_articles

いずれにせよ、結合モデルを用意してからオプションを使用する方がよいでしょhas_many:through

于 2013-01-11T22:15:18.030 に答える
0

最後に、テーブルを article_images に移行するように変更し、ビューを次のように修正しました。

- @articles.each do |article|
  = check_box_tag "image[article_ids][]", article.id, @image.articles.include?(article)
  = article.name

これは、HABTM で正常に動作するようになりました。

于 2013-01-17T10:55:05.923 に答える