将缩略图链接到原始图像时未定义的方法“to_model”

Jae*_*ger 3 model ruby-on-rails link-to carrierwave

我正在创建一个相册,计划使用 Masonry 和ImgZoom来显示,以便访问者单击它时可以看到更大的图像。

根据 ImgZoom 的说法,要进行缩放,您需要执行以下操作:

<a href="path/to/real/image.png">
    <img src="path/to/image's/thumbnail.png class="thumbnail" />
</a>
Run Code Online (Sandbox Code Playgroud)

所以我生成了一个上传器,其中包含以下内容:

class ImageUploader < CarrierWave::Uploader::Base

  include CarrierWave::MiniMagick

  storage :file

  def store_dir
    'portfolio/photos'
  end

  version :thumb do
    process :resize_to_fit => [220, nil]
  end
end
Run Code Online (Sandbox Code Playgroud)

一切都很完美,我可以毫无问题地调用这两个版本,但是当我尝试按照 ImgZoom 的说明执行以下操作时:

<%= @portfolio.photos.each do |p| %> 
#This is a nested form inside the portfolio form, so I need to do this to get my images

<%= link_to image_tag p.image.thumb.url, p.image %>
Run Code Online (Sandbox Code Playgroud)

或者:

<%= link_to p.image do %>
    <%= image_tag p.image.thumb.url, :class => 'thumbnail' %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:undefined method 'to_model' for #<ImageUploader:0x0000000c35f4d8>

我在堆栈溢出上发现了一个类似的主题,但提问者不清楚,并被邀请在论坛上提出其他问题,但我找不到。我可以单独访问“p.image”和“p.image.thumb.url”,但我无法建立从一个到另一个的链接,而使用简单的 html 就完全可以做到这一点。

我究竟做错了什么?

先感谢您

Sim*_*ert 5

首先,要在链接中创建“缩略图”类,您需要正确声明它。我编辑了链接:

<%= link_to p.image.url do %>
    <%= image_tag p.image.url, class: "thumbnail" %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

其次,您需要检查是否创建了适当的查看图像的路线。这可以通过正确链接到静态资产(因为您的图像不在“公共”下)或通过模板视图来完成。

如果文件存储在“公共”下,您的链接方式应该可以正常工作。

在文档中查看 image_path 的工作原理:image_path(以及更多)