Rails视图和控制器,(if / else语句)

时间:2012-05-31 12:30:36

标签: ruby-on-rails ruby view-helpers statements

我刚从头开始自己的rails项目。如果将minutes变量设置为某个值,我正在尝试将视图显示为hello。

The code现在在控制器中,我希望它在视图中显示输出。这可能吗?还是我在视图中写它?不确定是否正确。

home_controller.rb

class HomeController < ApplicationController
  def index
    @minutes = 23
    @minutes = params[:minutes]
  end
end

index.html.erb

<% if @minutes == 23 %>
  <%= "helllo" %>
<% else %>
  Anonymous
<% end %>

2 个答案:

答案 0 :(得分:3)

@minutes = params[:minutes] || 23

答案 1 :(得分:2)

在这个简单的情况下,在视图中放置了一些逻辑,但通常最好添加辅助方法(阅读Getting Started指南是一个好主意)。

可能你已经看过app / helpers目录了,在这些帮助文件中你可以定义视图层中可用的方法,与视图层相关的方法,但是做一些奇怪或脏的东西放在模板文件中

例如,在您的情况下,您可以拥有/app/helpers/time_helper.rb

module TimeHelper
  # I know the method name sucks a little
  def show_hello_if_minutes_is_23(minutes = @minutes)
    if minutes==23
      "Hello"
    else
      "Anonymous"
    end
  end
end

然后在您的index.html.erb模板中使用:

<%= show_hello_if_minutes_is_23 %>

如你所见:

  1. 您可以阅读方法名称并了解它的作用(在高级别)
  2. 逻辑采用ruby方法
  3. 该方法采用minutes参数,但它是可选的
  4. 请记住:通常重复是邪恶的(干的事情),但在视野中有时一次太多(但不是在这个简单的情况下)。

    更新:我刚看到你把@minutes变量设置为23,然后你覆盖它,使之前的作业变得毫无用处。我不知道您在控制器中尝试做什么,但如果您的问题是关于使用分钟变量的默认值,请使用Yuri's answer并使用||=运算符:{{ 1}}。