如果,否则,elsif,否则如果只在非空时显示对象

时间:2013-08-16 19:43:37

标签: ruby-on-rails ruby

Ruby on Rails应用程序,我有一个带有超链接的“Bootstrap”图像行。我只想展示其中包含内容的那些。

以下是一个例子:

<div class="span3">
    <h5 class="pagination-centered">
        <%= link_to (image_tag "/img/folder.jpg", alt: "Buyer's Guides", width: "75px"), action: "index", filter: @filter, type: "buyers_guides" %>
        <%= link_to "Buyer's Guides", action: "index", filter: @filter, type: "buyers_guides" %>
    </h5>
</div>
<div class="span3">
    <h5 class="pagination-centered">
        <%= link_to (image_tag "/img/folder.jpg", alt: "Datasheets", width: "75px"), action: "index", filter: @filter, type: "datasheets" %>
        <%= link_to "Datasheets", action: "index", filter: @filter, type: "datasheets" %>
    </h5>
</div>

使用if else语句会好吗?如果,elsif?

或者控制器怎么样?

class Users::MarketingController < ApplicationController
def index
    @filter = params[:filter]
    @type = params[:type]

if @filter
        if @type    
        arrays_of_strings_to_check_against = ['logos', 'datasheets', 'buyers_guides', 'videos', 'web_banners', 'presentations', 'documents', 'press_releases' ]

        if arrays_of_strings_to_check_against.any?{ |o| @type =~ /\b#{Regexp.escape(o)}\b/ }
            base_dir = "public/files/marketing"
            @files = Dir.glob("#{base_dir}/voip/#{@filter}/#{@type.downcase}/*.[a-z]*")
            @view = "files"
        else    
            @view = 'types'
        end
    else
        @view = 'types'
    end
else
    @view = "category"
end
end

新手并努力学习良好做法。 谢谢

2 个答案:

答案 0 :(得分:3)

是的,if / else通常在这种情况下使用,但绝对是丑陋的。您也可以使用condition ? do_if_true : do_if_false表示法,这很方便。

<% if has_content_condition %>
 <div class="span3">
  <h5 class="pagination-centered">
    <%= link_to (image_tag "/img/folder.jpg", alt: "Buyer's Guides", width: "75px"), action: "index", filter: @filter, type: "buyers_guides" %>
    <%= link_to "Buyer's Guides", action: "index", filter: @filter, type: "buyers_guides" %>
  </h5>
 </div>
 <div class="span3">
  <h5 class="pagination-centered">
    <%= link_to (image_tag "/img/folder.jpg", alt: "Datasheets", width: "75px"), action: "index", filter: @filter, type: "datasheets" %>
    <%= link_to "Datasheets", action: "index", filter: @filter, type: "datasheets" %>
  </h5>
 </div>
<% end %>

我不确定这是不是你的想法。如果不清楚,评论,我会很乐意提供帮助。 =)

答案 1 :(得分:0)

如果我理解正确,你也可以这样做:

if x.present?
  x
end

所以例如

@image = image.find(params[:id])
if @image.present?
  <div class="span3">
    <h5 class="pagination-centered">
      <%= link_to (image_tag "/img/folder.jpg", alt: "Buyer's Guides", width: "75px"), action: "index", filter: @filter, type: "buyers_guides" %>
      <%= link_to "Buyer's Guides", action: "index", filter: @filter, type: "buyers_guides" %>
    </h5>
  </div>
end