使用has_many设置我的模型

时间:2015-12-15 10:51:58

标签: ruby ruby-on-rails-4 associations

我尝试使用正确的关联来设置我的模型,我已经变得有点不稳定了,我有3个模型如下

class Image < ActiveRecord::Base
  has_many :categories
end

class Category < ActiveRecord::Base
  has_many :image_categories
  has_many :images, through: :image_categories
end

class ImageCategory < ActiveRecord::Base
  # Holds image_id and category_id to allow multiple categories to be saved per image, as opposed to storing an array of objects in one DB column
  belongs_to :image
  belongs_to :category
end

ImageCategory表是我的联接表,因为我看到它将image_ids所有category_idsImage相对应,因为Categories可以有多个permit_params :id, :title, :description, :photo, category_ids: [] form html: { multipart: true } do |f| inputs do f.semantic_errors f.input :title f.input :description, as: :text, input_html: { rows: 10, cols: 10 } f.input :categories, as: :check_boxes end end }

创建图像的表单

image

当我尝试创建can't write unknown attribute `image_id` 时,我收到以下错误:

reflect

我在这里犯了什么错误?

3 个答案:

答案 0 :(得分:4)

我认为您设置关联的方式导致了这个问题。

class Image < ActiveRecord::Base
  has_many :image_categories
  has_many :categories, through: :image_categories
end

class Category < ActiveRecord::Base
  has_many :image_categories
  has_many :images, through: :image_categories
end

class ImageCategory < ActiveRecord::Base
  belongs_to :image
  belongs_to :category
end

您当前的协会所描述的是,某个类别可以通过image_categories包含许多图片,但图片和图片类别通过模型中的类别关联,而这与我认为您不打算相关。

答案 1 :(得分:0)

我可以看到,图像模型中存在错误

class Image < ActiveRecord::Base
  has_many :categories, through: :image_categories
  has_many :image_categories
end

希望这能帮到你!!!

答案 2 :(得分:0)

只是要添加,在这种情况下不需要您的加入模型ImageCategory。查看has_and_belongs_to_many关联(HABTM)。

has_many:through在您需要向除ImageCategoryImageId以外的CategoryId模型添加附加属性的情况下非常有用。

但是,在您的方案中,HABTM就足够了。