0

ナビゲーションの一部に次のコードがあります。

  <% if user_signed_in? %>
    <li><%= link_to 'Edit Profile', edit_profile_path(current_user.profile) %></li>
    <li><%= link_to 'Edit Account', edit_user_registration_path %></li>
  <% elsif user_signed_in? and params[:controller] == 'profiles#edit' %>
    <li><%= link_to 'View Profile', profile_path(current_user.profile) %></li>
    <li><%= link_to 'Edit Account', edit_user_registration_path %></li>
  <% else %>
    <li><%= link_to 'Sign up', new_user_registration_path %></li>
  <% end %>

「user_signed_in」がどこにあるかに応じて、異なるリンクを表示したいと思います。しかし、私<% elsif user_signed_in? and params[:controller] == 'profiles#edit' %>は働いていないようです。

私は何が間違っているのですか?

4

4 に答える 4

2

他の人が既に述べたことに加えて、このコードが書かれているように、user_signed_in?常に最初のブロックに陥り、ブロックにヒットしないtrueのはいつですか。コードが意図したとおりに実行されるように、コントローラーとアクションを処理する条件を修正し、これを最初の条件にする必要があります。elsif

于 2012-11-19T02:21:02.223 に答える
1

profilesはコントローラーでありedit、アクションであるため、それらを別々のものとして指定する必要があります。

elsif user_signed_in? && params[:controller] == 'profiles' && params[:action] == 'edit'
于 2012-11-18T16:52:26.563 に答える
1

を使用できますparams[:controller]が、コントローラーの名前しか含まれていません。params[:action]アクション名が含まれます。

クリーナーとしても使えcontroller_nameて、action_nameどちらもご利用いただけます。

そのようです:

<% elsif user_signed_in? and controller_name == 'profiles' and action_name == 'edit' %>

今後のヒント

あなたはこの質問をしますが、実際には何params[:controller]が含まれているかを示すのは非常に簡単です。

 <%= "Controller name = #{params[:controller]}" %>

あなたの視界のどこかに。もちろん一時的なものです:)しかし、そうすれば、あなたの状態がうまくいかない理由がすぐにわかります.

HTH。

于 2012-11-19T00:11:11.510 に答える
0

リンクを表示または非表示にするための「URL」を決定したい場合は、次を使用できます。

 if request.path == "/profiles/edit" 

またはご希望のURL。ご想像のとおり、パスの形式はワイルドカードも受け入れます: /profiles/*

于 2012-11-18T16:56:58.103 に答える