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?
。这是次要的实际错误,但记录它为任何人 运行 成为未来这样的怪异。
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?
。这是次要的实际错误,但记录它为任何人 运行 成为未来这样的怪异。