0

Image与 有one-to-many关联Category

# Category model:
has_many :images
# Image model:
has_one :category
# Images migration file:
t.references :category, index: true, foreign_key: true

我正在尝试使用wice_grid gem实现网格视图。这有效,但一条线失败了。以下在索引视图中起作用:

g.column name: 'Category', attribute: 'category_id', auto_reload: true, html: {id: 'grid-cells'} do |image|
  image.category_id
end

但这会显示类别的编号/ID,而我希望它显示其名称。如果我尝试image.category而不是image.category_id出现错误:

PG::UndefinedColumn: ERROR:  column categories.image_id does not exist
LINE 1: SELECT  "categories".* FROM "categories" WHERE "categories"."image_id...

如何让它显示类别名称而不是类别的 ID?

控制器方法:

def index
  @images_grid = initialize_grid(Image,
  # include: :category  # Do I need this? Tried it with and without
  per_page: 40)
end

更新:更正关联并在视图中使用下面的代码后,它可以工作。此特定列的过滤器功能除外。如果我输入要过滤的文本,它会重新加载表格,但不应用过滤器(仍然显示所有记录)。

g.column name: 'Category', attribute: 'category_id', auto_reload: true, html: {id: 'grid-cells'} do |image|
  image.category.category unless image.category.nil?
end
4

3 回答 3

1

在图像模型中你应该有belongs_to :category,而不是has_one。关联是n-1,而不是1-1。

在问题的第二部分 - 按类别名称过滤项目,我相信您需要使用自定义过滤器:

g.column name: 'Category', attribute: 'images.category_id',
      custom_filter: Category.find(:all).map{|cat| [cat.id, cat.name]} do |image|
  image.category.name if image.category
end
于 2015-09-11T16:45:59.777 回答
1

a 的另一边has_many是 a belongs_to。你需要图像模型说:

belongs_to :category

我用来记住哪个是“人和狗”的助记词:一个人has_many是狗,一只狗belongs_to是主人。哪个人的衣领上戴了“id_tag”?狗。所以 id 列在belongs_to模型上。

于 2015-09-11T16:47:53.853 回答
0

它有很多类别,所以你应该做类似的事情

image.categories.find(:id)

您需要获取类别的提供 ID,因为查询 image.categories 将返回图像的所有类别的集合数组

于 2015-09-11T16:19:43.177 回答