Вспомогательная функция Rails не работает

Отказ от ответственности: я рельсы N00B. Я играю с простой вспомогательной функцией, которая не делает то, что я хочу.

  • У меня есть модель под названием "webform" с несколькими текстовыми полями (имя, адрес и т. Д.)
  • Я пытаюсь использовать вспомогательную функцию для проверки оператора if (т.е. 'is:address == '10')
  • Вот вспомогательная функция

    def webforms_helper
      if :address == 10
        print "Address is 10"
      else
        print "Address is not 10"
      end   
    end
    
  • В моем представлении 'show' я включил вспомогательную функцию <%= webforms_helper %>

  • Я загружаю веб-приложение, не получаю ошибок - хотя оно не распечатывает "Адрес 10" или "Адрес не 10"
  • Я также не добился успеха, используя put (и проверяя консоль) вместо print

  • Какие-нибудь мысли? Извиняюсь за вопрос новичка;)

3 ответа

Решение

Во-первых, правильный помощник будет выглядеть так:

module ApplicationHelper
  def myformchecker(ahash)
     if ahash[:address] == '10'
        return 'Address is 10'
     end
  end
end

Тогда в вашем контроллере:

class ApplicationController < ActionController::Base
  helper: application
  ...
end

Тогда по вашему мнению:

<%= myformchecker(params) %>

Таким образом, если представление было обработано в ответ на отправку формы, и форма имеет следующее:

<%= text_field_tag :address %>

И когда пользователь заполнил форму и поместил строку "10" в качестве адреса, в вашем представлении будет сгенерировано "Address is 10".

Ну, ваше упражнение не очень понятно, но как-то так...

def webforms_helper 
  if :address == 10 
    print "Address is 10" 
  else 
    print "Address is not 10" 
  end
end

никогда не будет выводить что-либо в представление Rails по одной причине. Вы используете методы put и print, эти два будут выводиться на консоль. Вы должны вернуть саму строку, сделать это так...

def webforms_helper 
  if :address == 10 
    "Address is 10" 
  else 
    "Address is not 10" 
  end
end

Я понимаю, что вы делаете простую демонстрацию, но тем не менее это хорошая идея, чтобы передать аргументы помощнику. Это то, что вы будете делать в 99% случаев..

def webforms_helper(address)
  if address == 10 
    #return something meaningful as string to the view
  else 
    #return something meaningful as string to the view too.
  end
end

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

# app/views/webforms/show.html.erb
<%= webforms_helper(address) %>

# app/helpers/webform_helper.rb
module WebformHelper
  def webforms_helper(address)
    if address == 10
      "Address is 10"
    else
      "Address is not 10"
    end
  end
end

Я также от всей души рекомендую найти хорошую книгу ( Agile Web Development с Rails) или учебник ( Ruby on Rails Tutorial), если вы только начинаете с Rails.

Другие вопросы по тегам