【问题标题】:Rails best practice for displaying partial if condition is true如果条件为真,Rails 显示部分的最佳实践
【发布时间】:2014-04-15 08:58:19
【问题描述】:

在我的控制器中,我正在获取用户的所有关联@highinterest 帐户,并且我正在添加 value 列的总和:

@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 = "fail" 和@highinterest = 0,我想在视图中渲染一个部分

将该逻辑放入控制器和视图的最佳做法是什么?如果满足该条件,我尝试在控制器 @rectext = true 中定义一个新变量。然后在视图中,我包装了对 的部分引用,但这并没有返回任何内容。

【问题讨论】:

  • 你的意思是@rectext == true 是测试一个布尔值而不是你写的赋值运算符=
  • 还要确保删除 if 语句的嵌入式 ruby​​ 代码中的等号(&lt;% if @rectext = true %&gt; 而不是 &lt;%= if @rectext = true %&gt;)。 &lt;%= some_ruby %&gt; 显示其中任何内容的输出。

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


【解决方案1】:

我认为您不需要单独的变量来保存 @highrec == "fail" &amp;&amp; @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 %>

由于&lt;%= 标签试图输出if @rectext = true 返回的值,您尝试&lt;%= if @rectext = true %&gt; 的行会导致语法错误。因此,需要注意的一点是,使用&lt;%= 标签将输出标签内的语句返回的值,而&lt;%(没有等号)只会在不打印的情况下进行评估!

其次,您在if 语句中分配@rectext = true,它应该是一个比较,即if @rectext == true 或只是if @rectext

【讨论】:

    【解决方案2】:

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

    然后在视图中这样调用方法:

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

    请注意,您在这段代码中编写:

     <%= if @rectext = true %>
    

    您正在为 @rectext 分配值 true 并且不检查它是否为 true。同样在这种情况下,您应该使用 而不是

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多