2017-08-07 76 views
2

我想在Devise使用的其中一個國際化字符串中使用資源屬性。我從Devise::SessionsController創造了一個新的SessionsController它繼承和它,我已經覆蓋create方法,如:如何在I18n上使用資源屬性設計flash消息

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#創建操作和控制器。

回答

1

您應該通過options中的nameset_flash_message!的參數。

set_flash_message!(:notice, :signed_in, { name: resource.name })

+1

我做了一個'flash [:notice]'也使用'signed_in'並傳遞資源屬性作爲值的工作,但它似乎是最好的方法,謝謝! –

1

我也沒有它的工作只是在create方法創建flash[:notice]消息:

def create 
    ... 
    flash[:notice] = I18n.t('devise.sessions.user.signed_in', name: resource.name) 
    ... 
end 

但@安德烈的回答也完美的作品。