尝试实现具有一对多关联的网格视图
Trying to implement a grid view with a one-to-many association
Image
与 Category
有 one-to-many
关联:
# 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
但这显示类别的 number/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
更新:更正关联并在视图中使用下面的代码后,它可以工作。除了这个特定列的过滤功能。如果我输入要过滤的文本,它会重新加载 table,但不会应用过滤器(所有记录仍会显示)。
g.column name: 'Category', attribute: 'category_id', auto_reload: true, html: {id: 'grid-cells'} do |image|
image.category.category unless image.category.nil?
end
它有很多类别,所以你应该做类似
image.categories.find(:id)
您需要为类别提供 ID,因为查询 image.categories 将 return 图像所有类别的集合数组
在图像模型中你应该有 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
has_many
的另一面是 belongs_to
。你需要图像模型说:
belongs_to :category
我用来记住哪个是"person and dog"的助记符:一个人has_many
条狗,一条狗belongs_to
一个主人。谁的衣领上有 "id_tag"?狗。所以 id 列在 belongs_to
模型上。
Image
与 Category
有 one-to-many
关联:
# 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
但这显示类别的 number/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
更新:更正关联并在视图中使用下面的代码后,它可以工作。除了这个特定列的过滤功能。如果我输入要过滤的文本,它会重新加载 table,但不会应用过滤器(所有记录仍会显示)。
g.column name: 'Category', attribute: 'category_id', auto_reload: true, html: {id: 'grid-cells'} do |image|
image.category.category unless image.category.nil?
end
它有很多类别,所以你应该做类似
image.categories.find(:id)
您需要为类别提供 ID,因为查询 image.categories 将 return 图像所有类别的集合数组
在图像模型中你应该有 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
has_many
的另一面是 belongs_to
。你需要图像模型说:
belongs_to :category
我用来记住哪个是"person and dog"的助记符:一个人has_many
条狗,一条狗belongs_to
一个主人。谁的衣领上有 "id_tag"?狗。所以 id 列在 belongs_to
模型上。