2012-05-31 4 views
0

Я только что начал свой собственный проект рельсов с нуля. Я пытаюсь показать приветствие, если переменная минут установлена ​​на определенное значение.Вид и контроллеры Rails, (if/else statements)

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 %> 
+3

Думаю, никто не понимает, о чем вы просите. – ABrukish

+0

Привет, добро пожаловать в StackOverflow, я отредактировал ваш вопрос с помощью кода из сути и добавил ваше сомнение (взятое из сути) о том, как это сделать правильно, о чем, вероятно, ваш вопрос. –

+0

Нужно еще одно голосование, чтобы одобрить редактирование (новая функция SO?) – DGM

ответ

2

Это хорошо прийти в этом простом случае поставить определенную логику в представлении, но, как правило, лучше для добавления вспомогательных методов (прочесть руководство Getting Started - хорошая идея).

Возможно, вы уже видели каталог приложений/помощников, в этих вспомогательных файлах вы можете определить методы, доступные на уровне представления, методы, относящиеся к слою представления, но делать вещи, которые были бы странными или грязными для размещения в шаблонах файлы.

Например, в вашем случае, вы могли бы иметь /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. логика ставится в методе рубинового
  3. Метод взять minutes аргумент, но это необязательно

И помните: как правило, повторение зла (Сухую вещь), но в поле зрения-земля иногда один раз слишком много (нет в этом простом случае однако).

UPDATE: Я только что видел, что вы положили значение переменной @minutes на 23, а затем перезаписали его, сделав предыдущее назначение бесполезным. Я не знаю, что вы пытаетесь сделать в своем контроллере, но если ваш вопрос заключается в том, что значение по умолчанию для переменной минут переходит с Yuri's answer и используйте оператор ||=: @minutes ||= params[:minutes].

+0

Эй, я думаю, что я просто немного смутился с переменной и т. Д., Ваш вспомогательный метод, похоже, то, что им нужно. Как я могу отобразить это в представлении?было бы что-то вроде <% show_hello_if_minutes_is_23%> или <% TimeHelper%> – Namenone

+0

Извините, я исправил разметку ответа, и теперь вы можете увидеть, как использовать помощник в представлении: <% = show_hello_if_minutes_is_23%>, обратите внимание на знак равенства , это означает, что вывод должен быть помещен в шаблон. –