Вспомогательные методы Rails 3 недоступны в контроллерах даже после их явного включения

Прежде всего, я новичок в рельсах.
У меня есть это в SessionsController:

def method
  sign_in 'user'
end

А это в SessionsHelper:

def sing_in(user)
    ......
end

Поиск в Google и чтение некоторых ответов на stackoverflow позволили мне попробовать что-то вроде этого:
Включение 'SessionsHelper' в SessionsController и даже попытка поместить его в 'ApplicationController' следующим образом:

class ApplicationController < ActionController::Base

  protect_from_forgery
  include SessionsHelper

  def handle_unverified_requests
    sign_out
    super
  end
end

Но я получаю

NoMethodError: неопределенный метод `sign_in' для SessionsController:0x007eff2004fcd8

Также несколько вопросов:
1) В чем смысл/разница в размещении нескольких методов в Heplers и нескольких в контроллерах? Это проблема безопасности или что?
2) Я также пытался >поместить метод sign_in в SessionsController, поскольку я прочитал в stackoverflow, что методы, определенные в контроллерах, могут быть доступны в представлениях. поэтому, чтобы избежать каких-либо проблем с представлениями, которые я использовал

helper_method

но все тот же NoMethodError
3) Лучший и простой способ получить доступ к вспомогательным методам в контроллерах?

Итак, в чем я ошибаюсь?
Я использую Rails 3.2.11 и Ruby 2.0.0p0.


person mrudult    schedule 08.05.2013    source источник


Ответы (1)


Похоже на опечатку: ваш вспомогательный метод — «sing_in» вместо «sign_in».

person sockmonk    schedule 08.05.2013
comment
Серьезная глупая ошибка. :) Спасибо за быстрый ответ. Но все же мне нужны другие ответы. - person mrudult; 08.05.2013
comment
Если у вас есть метод в контроллере, отличный от метода действия «маршрут» (например, «показать», «создать» и т. д.), потенциально он может быть доступен непосредственно из браузера, особенно если у вас настроен маршрут с подстановочными знаками в ваш файл маршрутов, например: match ':controller(/:action(/:id))' Любые методы контроллера должны быть закрытыми или перемещены в помощники или другие PORO (обычные старые объекты Ruby). Еще одно место для размещения некоторых вспомогательных методов — это объект-презентатор. Просто найдите шаблон ведущего и, возможно, посмотрите на жемчужину драпировщика. - person sockmonk; 08.05.2013