我的导航部分有以下代码:
<% 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' %>
似乎无法正常工作。
我做错了什么?
答案 0 :(得分:2)
除了其他人已提到的内容之外,正如编写此代码时,当user_signed_in?
为true
时,始终会落入第一个块,而永远不会点击elsif
块。
您必须修复处理控制器和操作的条件 AND 使其成为第一个条件,以便您的代码按预期执行。
答案 1 :(得分:1)
profiles
是您的控制器,edit
是您的操作,因此您需要将它们指定为单独的内容:
elsif user_signed_in? && params[:controller] == 'profiles' && params[:action] == 'edit'
答案 2 :(得分: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。
答案 3 :(得分:0)
如果您想确定显示链接或隐藏链接的“网址”,可以使用:
if request.path == "/profiles/edit"
或您想要的网址。您可以猜到,路径的格式也接受通配符:/ profiles / *