Я использую Clearance 1.1.0 драгоценный камень с Ruby on Rails 4.0.1. Я пытаюсь переопределить контроллер сеансов, чтобы предоставить свой собственный метод. Я не смог успешно использовать рельсы для использования моего контроллера.Пытается переустановить контроллер в самоцвете разметки Thoughtbot для Rails
/app/controllers/sessions_controller.rb
class SessionsController < Clearance::SessionsController
private
def flash_failure_after_create
flash.now[:notice] = translate(:bad_email_or_password,
:scope => [:clearance, :controllers, :sessions],
:default => t('flashes.failure_after_create', :new_password_path => new_password_path).html_safe)
end
end
Я попробовал несколько разные вещи внутри моего routes.rb файла, и не увенчались успехом. Я хочу изменить маршрут sign_in.
get '/sign_in' => 'sessions#new', :as => 'sign_in'
Уступает следующую ошибку.
Вы можете определили два маршрута с тем же именем, используя
:as
вариант, или вы можете быть перекрытым маршрут уже определен ресурсом с тем же именованием.
Любые идеи? Спасибо!
Редактировать: Я допустил ошибку. Мне действительно нужны сеансы # create для использования моего контроллера. Я пытаюсь передать другую переменную в файл yaml для флэш-памяти при неудачной попытке входа в систему.
Редактировать 2: Я соответствующий сеанс # создаю строку для моих маршрутов. В моем контроллере сеанса я скопировал и отредактировал для тестирования метода flash_failure_after_create. Это не называется. Поэтому я затем копирую метод create. Теперь мой метод создания вызывается, но не мой метод flash_failure_after_create. Чтобы получить его, я должен был создать метод create, скопированный из gem, и изменил status.failure_message, чтобы напрямую вызвать метод flash_failure_after_create. Это какая-то ошибка с оформлением?
routes.rb
post 'session' => 'sessions#create', :as => nil
sessions_controller.rb
class SessionsController < Clearance::SessionsController
def create
@user = authenticate(params)
sign_in(@user) do |status|
if status.success?
redirect_back_or url_after_create
else
#flash.now.notice = status.failure_message
flash.now.notice = flash_failure_after_create
render :template => 'sessions/new', :status => :unauthorized
end
end
end
private
def flash_failure_after_create
# Changed flash for easy testing
flash.now[:notice] = 'Ballz.'
#flash.now[:notice] = translate(:bad_email_or_password,
# :scope => [:clearance, :controllers, :sessions],
# :default => t('flashes.failure_after_create', :sign_up_path => sign_up_path).html_safe)
end
end
Похоже, что flash_failure_after_create было устарело [это изменение] (https://github.com/thoughtbot/clearance/commit/2c930b0d0a7b8569e34ed27b0e9ab8d94a90caf9). I18n теперь лучший способ изменить это сообщение, но это не позволит вам изменить какие-либо параметры, используемые для интерполяции. Я открыл и выпустил в Clearance (https://github.com/thoughtbot/clearance/issues/378) –