2014-04-15 12 views
0

在我控制器,我得到一個用戶的所有相關@highinterest賬戶的,而且我把數值列的總和:Rails的最佳做法顯示出部分,如果條件爲真

@dohighinterest = Account.where(user_id: current_user, accounttype: 'Savings', name: ['GE Capital Bank', 'Barclays', 'CIT Bank', 'Bank5 Connect', 'Ally Bank', 'Discover', 'First Choice Bank', 'FNBO Direct', 'Mutual of Omaha', 'Sallie Mae Bank', 'American Express Bank', 'Capital One 360']) 

@highinterest = @dohighinterest.sum(&:value) 

在控制器的後面,我定義了變量,以便視圖知道要渲染哪個類。

if @highinterest > (@rechighinterest * 0.8) && (@highinterest < (@rechighinterest * 1.2)) 
    @highrec = "pass" 
elsif @highinterest > (@rechighinterest * 0.6) && (@highinterest < (@rechighinterest * 1.4)) 
    @highrec = "okay" 
else 
    @highrec = "fail" 
end 

這裏的視圖:

<div class="rollup <%= @highrec %>"> 
    <p>You're gaining interest on</p> 
    <div class="percentage"> 
    $<%= number_with_delimiter(@highinterest, :delimiter => ',') %> 
    </div> 
</div> 

此外,我想呈現的局部視圖如果@highrec = 「失敗」 和@highinterest = 0

將該邏輯放入控制器和視圖的最佳做法是什麼?我試圖在控制器@rectext = true中定義一個新變量,如果它滿足該條件的話。然後在視圖中,我將部分引用包含爲<%= if @rectext = true%>,但那不會返回任何內容。

+1

您的意思是'@rectext == TRUE'這是檢驗一個布爾值,而不是賦值運算符'='你寫的嗎? –

+0

還要確保爲if語句('<%if @rectext = true%>'而不是'<%= if @rectext = true%>')移除嵌入式ruby代碼中的等號。 '<%= some_ruby%>'顯示它內部的輸出。 – mralexlau

回答

0

我不認爲你需要一個單獨的變量來保存@highrec == "fail" && @highinterest == 0的值。您可以在視圖中使用相同的條件。如果有更多的變量,你可以引入一個變量來保持視圖更清晰!

<% if @highrec == "fail" && @highinterest == 0 %> 
    <%= render partial: 'path_to_other_partial' %> 
<% else %> 
    <div class="rollup <%= @highrec %>"> 
    <p>You're gaining interest on</p> 
    <div class="percentage"> 
    $<%= number_with_delimiter(@highinterest, :delimiter => ',') %> 
    </div> 
    </div> 
<% end %> 

你試過<%= if @rectext = true %>將導致語法錯誤,因爲<%=標籤,這是試圖通過輸出返回if @rectext = true的價值線。因此,需要注意的一點是,使用<%=標記將輸出標記內語句返回的值,並且<%(不帶等號)將僅評估而不打印!

其次,您在if聲明中指定@rectext = true,它應該是一個比較,即if @rectext == trueif @rectext

0

您可以定義文件夾應用程序/傭工/ controllername_helper.rb是臨危的@highrec價值觀和@highinterest作爲參數裏面一個輔助方法,然後根據自己的需要返回true或false。

然後在視圖中調用的方法是這樣的:

<% if helper_method_name(@highrec, @highinterest) %> 
    <%= render partial: 'partial_path' %> 
<% end %> 

注意,在這個代碼你寫:

<%= if @rectext = true %> 

要指定@rectext true值,而不是檢查,如果它是真正。此外,在這種情況下,你應該使用<%,而不是<%=