2014-04-15 9 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值,而不是检查,如果它是真正。此外,在这种情况下,你应该使用<%,而不是<%=