Carrierwave asset_path 在 rails helper 中使用时变为未定义方法

Carrierwave asset_path becomes undefined method when used in rails helper

Rails 5.1.1, ruby2.2.5p319, 载波 1.1.0

试图将一个在整个应用程序中重复使用的视图片段重构为一个助手,但我碰壁了。 Issue 模型上有两个载波上传器:Image 和 Imageback。我将变量传递给该方法以确定我要点击的列(在下面的代码中作为 graphic 传递)

辅助方法(在application_helper.rb中):

def issue_image_display(issue, graphic, size, sizeinpx, lodge = nil)
  if graphic
    if graphic == "imageback"
      link_to image_tag(issue.imageback_url(size)),
      imageback_url(:full), rel: :lazybox
    else
      link_to image_tag(issue.image_url(size)),
      image_url(:full), rel: :lazybox
    end
  else
    image_tag(
      "missing_flap.jpg",
      alt: "No Flap Image for #{issue.combined}",
      style: "width: #{sizeinpx}px"
      )
  end
end

这被以下调用:

<ul class="issue-list" id="issues">
  <div class="page">
    <%# cache issue do %>
      <%= render partial: "issues/issue_small",
              collection: @issues,
              as: :issue,
              wishlist: false,
              locals: {
                size: :list,
                sizeinpx: '200'
              } %>
    <%# end %>
  </div>
</ul>

以及被迭代的部分,调用实际的辅助方法:

<li class="issue-container">
  <article class="issue">
    <%= issue_image_display(issue, issue.image, size, sizeinpx) %>
    <p class="lodge-name">
      <%= link_to issue.combined, lodge_issue_path(issue.lodge, issue) %>
      <span><%= issue.first_issue.stamp("1969") if issue.first_issue %> | (OA BBv6: <%= issue.oa_bb_combined %>)</span>
    </p>
    <% if :wishlist == true -%>
    <p class="add-to-wishlist">
      <%= link_to 'Add to Wishlist', wishlist_items_path(issue_id: issue.id), method: :post, class: "button button-small" %>
    </p>
    <% end -%>
  </article>
</li>

错误是:

ActionView::Template::Error at /issues
undefined method `asset_path' for #<ImageUploader::Uploader70194310458580:0x007faec5409400>

原来上面有两个失败。 ActionView 正在掩盖它们,所以我一直把它拉高,直到我得到一个有意义的行号。

 if graphic
    if graphic == "imageback"
      link_to image_tag(issue.imageback_url(size)),
      imageback_url(:full), rel: :lazybox
    else
      link_to image_tag(issue.image_url(size)),
      image_url(:full), rel: :lazybox
    end
  else

image_url 之前缺少 issue 调用,因此它在调用载波方法时什么也没有。

第二个问题是 if graphic 检查。事实证明,它的编写方式始终是正确的。为了克服这个问题,它需要变成 if !graphic.blank?。这是次要的实际错误,但记录它为任何人 运行 成为未来这样的怪异。