用于显示部分if条件的Rails最佳实践是真的

时间:2014-04-15 00:32:23

标签: ruby-on-rails ruby ruby-on-rails-4

在我的控制器中,我收到了所有用户关联的@highinterest帐户,并且我正在添加值列的总和:

@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中定义一个新变量,如果它满足该条件。然后在视图中,我将部分引用包装为&lt;%= if @rectext = true%&gt;,但是没有返回任何内容。

2 个答案:

答案 0 :(得分: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返回的值。因此,需要注意的是,使用<%=标记将输出标记内语句返回的值,而<%(没有等号)仅在不打印的情况下进行评估!

其次,您要在@rectext = true语句中指定if,它应该是一个比较,即if @rectext == trueif @rectext

答案 1 :(得分:0)

您可以在 app / helpers / controllername_helper.rb 文件夹中定义一个辅助方法,该方法将@highrec和@highinterest的值作为参数接收,然后根据您的需要返回true或false。

然后在视图中以这种方式调用方法:

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

请注意,在此代码中您写道:

 <%= if @rectext = true %>

您将@rectext赋值为true,而不是检查它是否为true。同样在这种情况下,您应该使用&lt;%而不是&lt;%=