在我的控制器中,我收到了所有用户关联的@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;,但是没有返回任何内容。
答案 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 == true
或if @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;%=