2015-11-21 99 views
0

我有多個if語句。Rails多個`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

你應該把你的條件邏輯放到你的控制器中,把結果賦給一個變量,然後在你的視圖中引用這個變量。不要用測試填充視圖,事先做好。 Ruby和ERB不是PHP。 –

回答

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語句中含糊不清。

這可能不是最好的解決方案(我會用link_to來完成<a>塊,而不是隻返回開放標籤)。

0

您需要使用if .. elsif .. else ..因爲你的條件endcase .. when .. end都在同一個變量:

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

<% elsif offer.merchant == 'rakuten' %> 
    <h1>WOOP</h1> 

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

<% else %> 
    <h1>FAIL</h1> 
    <a href="<%= offer.url %>" target="_blank"> 
<% end %> 

讀 「Ruby if...else, case, unless」 獲得更多有關條件聲明。