我正在尝试在Devise使用的一个国际化字符串中使用资源属性。我创建了一个新的SessionsController
,它继承自Devise::SessionsController
,在其中,我覆盖了create
方法,如:
class SessionsController < Devise::SessionsController
def create
self.resource = warden.authenticate!(auth_options)
set_flash_message!(:notice, :signed_in)
sign_in(resource_name, resource)
yield resource if block_given?
respond_with resource, location: after_sign_in_path_for(resource)
end
end
我正在重定向到特定路径并传递resource
。我可以使用byebug进行调试,并且我看到来自已登录用户的资源及其属性,但我仍然不知道如何传递这些属性以便在“区域设置”消息中使用,例如:
devise:
sessions:
user:
signed_in: 'You have signed in successfully. Welcome %{name}!'
目前name
不会打印用户名称中的值,因此,我很想知道如何实现它。
我在_message.html.erb
部分显示消息,例如:
<% flash.each do |key, value| %>
<div class="alert alert-icon alert-dismissible alert-<%= key %> flash-alert" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<i class="fa fa-times" aria-hidden="true"></i>
</button>
<%= value %>
</div>
<% end %>
我的路线包括SessionsController:
devise_for :users, controllers: { sessions: 'sessions' }, skip: [:registrations]
as :user do
...
post 'login', to: 'sessions#create', as: :user_session
end
end
POST'登录'也指向DeviseSessions #create动作和控制器。
答案 0 :(得分:1)
您应该通过name
的{{1}}参数中的options
。
set_flash_message!
答案 1 :(得分:1)
我在flash[:notice]
方法中创建create
消息时也做到了:
def create
...
flash[:notice] = I18n.t('devise.sessions.user.signed_in', name: resource.name)
...
end
但@André的回答也很有效。