我在Rails中的应用程序助手中定义了一个函数,它应该返回特定模型的id。但是,该函数返回一个具有单个类似哈希的元素的数组。
application_helper.rb:
module ApplicationHelper
def singleton(documents) #this function works perfectly
count = 0
documents.each do |document|
if ((document.extension == 'jpg') || (document.extension == 'jpeg') || (document.extension == 'png') || (document.extension == 'gif') || (document.extension == 'bmp'))
count += 1
end
end
return count
end
def getbanner(course) #this function is returning array some problem
picid = -99
storeval = singleton(course.documents)
if (storeval == 0)
picid = -99
elsif (storeval == 1)
course.documents.each do |document|
if ((document.extension == 'jpg') || (document.extension == 'jpeg') || (document.extension == 'png') || (document.extension == 'gif') || (document.extension == 'bmp'))
picid = document.id
end
end
elsif (storeval > 1)
course.documents.each do |document|
if ((document.extension == 'jpg') || (document.extension == 'jpeg') || (document.extension == 'png') || (document.extension == 'gif') || (document.extension == 'bmp'))
picid = document.id
return picid
end
#return picid
end
end
end
end
我在erb模板中调用块内的函数,如下所示:
<% @courses.each do |course| %>
<% banndocid = getbanner(course) %>
<% docofbanner = course.documents.find(banndocid) %>
<!--- START OF CARD -->
<div class="container">
<%= link_to( course_path(course) ) do %>
<div class="container card">
<div class="row" style="display:flex;align-items: center;">
<div class="col-xs-4 ">
<%= image_tag( docofbanner.file.url, class: "img img-responsive pull-left center-block", style: "margin-top:1em;margin-bottom:1em;", alt: "icon" ) %>
</div>
<div class="col-xs-8">
<div class="row"><h2><%= course.name %></h2></div>
<div class="row"><p><%= course.summary %></p></div>
</div>
</div>
</div>
<% end %>
该功能的结果如下:
Document id: 8, name: "dfgjk", extension: "png", created_at: "2016-01-28 09:05:42", updated_at: "2016-01-28 09:05:42", file: "Screenshot_from_2015-11-22_23-12-36.png", course_id: 3
我希望此函数返回一个数字。
答案 0 :(得分:1)
在大多数情况下,它不会返回数字。
如果storeval == 1
您将返回each
的结果。如果它不是图像文件并且storeval > 1
,则相同。顺便说一句,如果它不能&lt; 0,并且不是0,并且不是1,您可以打赌它大于1.该代码值得彻底清理。
Boo用于重复图像识别码,这应该是一种方法。我也可能只是使用一个数组,看它是否包含扩展名。
我无法判断您是否真的为== 1和&gt;运行不同的代码1,但粗略地说:
def getbanner(course) #this function is returning array some problem
storeval = singleton(course.documents)
if storeval >= 1
course.documents.each do |document|
return document.id if image?(document)
end
end
return -99
end