rails: Link_to 查找方法

rails: Link_to find-method

如何像 rails 中的数据库过滤器一样使用 link_to?

图片 --> belong_to:画廊 --> 单击画廊 --> 打开画廊所有图像的视图(不是数据库中的所有记录!)

<%= 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', controller: "images", action: "show", gallery_id: your_gallery_id %>

它允许您访问控制器中的 gallery_id 参数并找到正确的记录。

它显示了所有画廊的图像,因为您没有传递控制器可用于过滤图像的 gallery_id,您正在点击索引操作。因此,只需修改您的 link 以显示该特定画廊的图像:

<%= link_to 'Gallery', @gallery %> or just <%= link_to @gallery %>

并且控制器显示视图应该查询图像linked 到那个特定的图库

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_to基本的表演动作:

<%= link_to 'Preview', gallery %>

之后我更改了 show.html.erb 并添加了图像迭代:

  <% @images.each do |image| %>
  ... <%= image.img_url %> ...
  <% end %>

我会尝试找出为什么您建议的解决方案不起作用。现在无法解释。