问题描述
如何使用link_to像Rails中的数据库过滤器一样?
图像->属于:画廊->单击图库->打开画廊所有图像的视图(不是数据库中的所有记录!)
<%= link_to 'Images of gallery',controller: "images" %>
这是有效的,但是它向我显示了数据库中所有可用的图片。我需要将类似下一个代码段的内容放入link_to:
@gallery = Image.find(params[:gallery_id])
我该怎么做?
解决方法
希望您定义
@gallery = Image.find(params[:gallery_id])
在您的控制器上起作用。
您可以通过link_to
方法传递参数:
<%= link_to 'Images of Gallery',controller: "images",gallery_id: your_gallery_id %>
# or link should be map to show action instead of index action
<%= link_to 'Images of Gallery',action: "show",gallery_id: your_gallery_id %>
它允许您访问控制器中的gallery_id
参数并找到正确的记录。
它正在显示所有画廊的图像,因为您没有传递控制器可以用来过滤图像的gallery_id
,您正在执行索引操作。因此,只需修改您的链接以显示特定画廊的图像即可:
<%= link_to 'Gallery',@gallery %> or just <%= link_to @gallery %>
并且控制器显示视图应查询链接到该特定图库的图像
def show
gallery = Gallery.find(params[:id])
@images = gallery.images
end
,
我不知道为什么两个答案都行不通。我收到错误“找不到ID找不到”错误。
此解决方案完成了工作:
我在控制器中调用了before_action方法:
before_action :set_gallery,only: [:show,:edit,:update,:destroy]
在set_gallery方法中,我这样输入:
def set_gallery
@gallery = Gallery.find(params[:id])
@images = @gallery.images
end
然后我将link_更改为基本的show动作:
<%= link_to 'Preview',gallery %>
之后,我更改了show.html.erb并添加了图像迭代:
<% @images.each do |image| %>
... <%= image.img_url %> ...
<% end %>
我将尝试找出为什么您建议的解决方案无效的原因。现在无法解释。