rails:Link_to查找方法

问题描述

如何使用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 %>

我将尝试找出为什么您建议的解决方案无效的原因。现在无法解释。