Rails多个`if`语句不起作用

时间:2015-11-21 00:55:24

标签: ruby-on-rails ruby

我有多个if语句。

  <% if offer.merchant == 'webgains' %>
    <a href="<%= offer.url %>&clickref=<%= current_user.id %>" target="_blank">
  <% else %>
    <a href="<%= offer.url %>" target="_blank">
  <% end %>

  <% if offer.merchant == 'rakuten' %>
    <h1>WOOP</h1>
  <% else %>
    <h1>FAIL</h1>
  <% end %>

  <% if offer.merchant == 'cj' %>
    <a href="<%= offer.url %>?sid=<%= current_user.id %>" target="_blank">
  <% else %>
    <a href="<%= offer.url %>" target="_blank">
  <% end %>

  <% if offer.merchant == 'aw' %>
    <a href="<%= offer.url %>&clickref=<%= current_user.id %>" target="_blank">
  <% else %>
    <a href="<%= offer.url %>" target="_blank">
  <% end %>

有没有办法将它们整合到更干净的代码中并使它们顺利运行?

2 个答案:

答案 0 :(得分:3)

在您的帮助文件中,代码可以简化为单个辅助函数:

def merchant_link(merchant, url, user_id)
  case merchant
  when "webgains", "aw"
    "<a href=\"#{url}&clickref=#{user_id}\" target=\"_blank\">".html_safe
  when "cj"
    "<a href=\"#{url}?sid=#{user_id}\" target=\"_blank\">".html_safe
  when "rakuten"
    "<h1>WOOP</h1>".html_safe
  else
    "<h1>FAIL</h1>".html_safe
  end
end

然后在视图中调用辅助函数:

<%= merchant_link(offer.merchant, offer.url, current_user.id) %>

您需要重构逻辑,因为if else语句中存在歧义。

这可能不是最佳解决方案(我会使用link_to来执行完整的<a>块,而不是仅返回打开的标记。)

答案 1 :(得分:0)

您需要使用if .. elsif .. else .. endcase .. when .. {{ 1}}因为你的条件是在同一个变量上:

end

阅读&#34; Ruby if...else, case, unless&#34;有关条件陈述的更多信息。