2

Devise コントローラーからカスタム フラッシュ メッセージをレンダリングしようとしています。

次のようにビューにレンダリングされています。

<strong>Your profile is incomplete.</strong> Why not #{ActionController::Base.helpers.link_to 'add some more information', edit_user_registration_path}.

このフラッシュで HTML および Rails ヘルパーをレンダリングするにはどうすればよいですか?

コントローラーでフラッシュを呼び出しています

set_flash_message :warning, :profile_incomplete

:profile_incompleteconfig/locales/devise.en.yml で定義されています。

文字列をコントローラーに直接入れてみました。これにより、ヘルパーが正しくレンダリングされますが、代わりに Devise の翻訳が見つからないというエラーが表示されます。

.html_safeyaml エラーの原因となる devise.en.yml に追加しようとしました。:profile_incompletewhich cause に追加してみましたundefined method 'html_safe' for :profile_incomplete:Symbol。そして、プレーン文字列に追加しようとしましたが、何もしていないようです。

私は何が欠けていますか?提案をありがとう。

編集

sessions_controller.rb

def after_sign_in_path_for(resource)

  if current_user.completeness < 100
    set_flash_message :alert, :profile_incomplete, :link => ActionController::Base.helpers.link_to('add some more information', edit_user_registration_path)
  end

end

devise.en.yml

en:
  devise:
    sessions:
      profile_incomplete:"<strong>Your profile is incomplete.</strong> Why not #{link}."

application.html.erb

<% flash.each do |key, msg| %>
    <div class="alert alert-<%= key %>">
        <a class="close" data-dismiss="alert">x</a>
        <%= msg.html_safe %>
    </div>
<% end %>
4

1 に答える 1

4

これは set_flash_message のソースです: https://github.com/rymai/devise_invitable/blob/master/lib/devise_invitable/controllers/internal_helpers.rb#L5

i18n ファイルにメソッドを追加することはできません..単に補間という名前です。あなたの問題に対する私の解決策は次のとおりです。

set_flash_message :warning, :profile_incomplete, :link => link_to('add some more information', edit_user_registration_path)

そしてdevise.en.ymlで

...
profile_incomplete: "<strong>Your profile is incomplete.</strong> Why not %{link}"

また、フラッシュ メッセージを表示するとき (おそらく application.html.erb/haml 内)、各フラッシュ メッセージの最後に html_safe を追加します。

于 2012-05-16T20:09:52.983 に答える