2013-07-08 2 views
2

Я пытаюсь использовать Devise (2.2.4), с которым я новичок, с приложением Rails 3.2.13/Ruby 2.0.0p195, которое я создаю. Я включил scoped_views, потому что хочу иметь своих отдельных пользователей и администраторов. И я создал своих собственных пользователей :: RegistrationsController, которые, кажется, делают то, что я хочу. Я только что добавил своих собственных пользователей :: SessionController, где я столкнулся с проблемами.Недостаток метода sign_in_params

Я прямо скопировал несколько методов действий из источника Devise :: SessionsController в качестве первого шага, планируя изменить их после их работы (мой код контроллера находится внизу этого сообщения). Но мой «новый» метод терпит неудачу при вызове с помощью NameError, потому что `sign_in_params ', по-видимому, не определен.

Ну, это кажется довольно странным, потому что я наследую от Devise :: SessionsController, и когда я смотрю на source for that на GitHub, в защищенном разделе внизу внизу есть знаковые_и_параметры. Поэтому я решил исследовать, правильно ли наследуется мой контроллер от Devise :: SessionsController - и это, безусловно, похоже. Я могу перечислить все унаследованные методы, только не один из них. Так что я в конечном итоге работаю следующий фрагмент кода в консоли Rails:

(Devise::SessionsController.new.methods - DeviseController.new.methods).each {|m| puts m} 

И он производит следующий вывод:

_one_time_conditions_valid_68? 
    _one_time_conditions_valid_72? 
    _callback_before_75 
    _one_time_conditions_valid_76? 
    new 
    create 
    destroy 
    serialize_options 
    auth_options 

Если я игнорировать подчеркнутые методы, остальные являются всеми теми методами, определенными в исходном коде Devision :: SessionsController кроме sign_in_params. Я не вижу, как все, что я написал, может удалить этот метод, и я не могу думать, что еще попробовать. Google молчал по этой проблеме, поэтому я предполагаю, что я делаю что-то однозначно глупо, но я не могу понять, что. Любые предложения, пожалуйста? И может кто-то другой попытается запустить этот бит кода консоли Rails, чтобы узнать, что они получают?

class Users::SessionsController < Devise::SessionsController 
    prepend_before_filter :require_no_authentication, :only => [ :new, :create ] 
    prepend_before_filter :allow_params_authentication!, :only => :create 
    prepend_before_filter { request.env["devise.skip_timeout"] = true } 

    # GET /resource/sign_in 
    def new 
    self.resource = resource_class.new(sign_in_params) 
    clean_up_passwords(resource) 
    respond_with(resource, serialize_options(resource)) 
    end 

    # POST /resource/sign_in 
    def create 
    self.resource = warden.authenticate!(auth_options) 
    set_flash_message(:notice, :signed_in) if is_navigational_format? 
    sign_in(resource_name, resource) 
    respond_with resource, :location => after_sign_in_path_for(resource) 
    end 

end 

ответ

0

Я думаю, что вы используете код из разрабатываемой версии, совместимой с Rails 4, в приложении с рельсами 3.

sign_in_params - метод, который будет использоваться с strong parameters. Драгоценный камень, используемый в рельсах 4.

Если вы проверите контроллер на версии 2.2. https://github.com/plataformatec/devise/blob/v2.2/app/controllers/devise/sessions_controller.rb

Вы увидите, что нет метода sign_in_params.

Проверьте, какая версия разработки вы используете и скопируйте код на основе этой версии версии вашего контроллера, а не последний код из github.

+0

Спасибо, Arjan. Вы совершенно правы. «Мастер» ветви на GitHub, что ссылки Wiki Wiki, похоже, являются более новой версией, чем текущий камень. Я даже проверил README для ведущей ветки, у которой есть значок в верхней части, говорящий «gem version 2.2.4», но теперь, когда вы указали, что я могу явно выбрать источник для версии 2.2, я вижу, исправить. Я предполагаю, что значок «gem version 2.2.4», который я проверил, не относится к ветке, в которой он появляется, но просто сообщает вам, что такое текущая версия выпуска. Мне нужно разобраться в том, что мне говорит GitHub. – RobJ

Смежные вопросы