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

然后我做了 rake db:migrate

现在,当我更新图像时,我会显示复选框以连接文章和图像:

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

当我检查第一个复选框并更新它无法创建关联时,错误是:

图片控制器中的 ActiveRecord::StatementInvalid#update

Mysql2::Error: 表 'project_development.articles_images' 不存在:SELECT articles.* FROM articlesINNER JOIN articles_imagesON articlesid= articles_imagesarticle_id在哪里articles_imagesimage_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

迁移是错误的,表名加入了两个模型名的复数,但是它们是按字母顺序排列的,即articles_images不是images_articles

无论哪种方式,最好先有一个连接模型,然后再有一个has_many选项:through

于 2013-01-11T22:15:18.030 回答
0

最后,我更改为将表迁移到articles_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 回答