【问题标题】:undefined method 'to_model' when linking thumbnail to original image将缩略图链接到原始图像时未定义的方法“to_model”
【发布时间】:2016-10-06 14:08:05
【问题描述】:

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

根据 ImgZoom,要使缩放起作用,您需要执行以下操作:

<a href="path/to/real/image.png">
    <img src="path/to/image's/thumbnail.png class="thumbnail" />
</a>

所以我生成了一个上传器,里面有以下内容:

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

一切正常,我可以毫无问题地调用这两个版本,但是当我尝试按照 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 %>

或:

<%= link_to p.image do %>
    <%= image_tag p.image.thumb.url, :class => 'thumbnail' %>
<% end %>

我收到以下错误:undefined method 'to_model' for #&lt;ImageUploader:0x0000000c35f4d8&gt;

我在堆栈溢出上发现了一个类似的主题,但提问者不清楚,并被邀请在论坛上提出其他问题,但我找不到。 我可以单独访问 'p.image' 和 'p.image.thumb.url',但我无法建立一个到另一个的链接,这对于简单的 html 来说是完全可行的。

我做错了什么?

提前谢谢你

【问题讨论】:

  • 你试过&lt;%= link_to p.image.url do %&gt;....吗?
  • 这个。这很简单。该死的!能否请您将此作为真实答案,以便我接受?非常感谢!
  • 你可以接受西蒙的回答。我很高兴能提供帮助。

标签: ruby-on-rails model carrierwave link-to


【解决方案1】:

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

<%= link_to p.image.url do %>
    <%= image_tag p.image.url, class: "thumbnail" %>
<% end %>

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

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

查看文档中 image_path 的工作原理:image_path (and more)

【讨论】:

  • 您好,感谢您的回答,我很肯定到达图像及其在“公共”中的位置,但是,我尝试了您的代码,但仍然遇到相同的错误(抱歉忘记了缩略图类,我重新输入了问题的代码)
  • 您链接到的 p.image 不会导致正确的路线。这意味着此图像未绑定到视图,这就是引发错误的原因。你可以试试&lt;%= link_to image_tag(p.image.url) do %&gt; 这对你有用吗?
  • 是的,正确的是链接 p.image.url 而不是 p.image
猜你喜欢
  • 1970-01-01
  • 2021-10-28
  • 1970-01-01
  • 2015-03-02
  • 2016-04-09
  • 1970-01-01
  • 2013-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多