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