如何在rails中的特定页面上显示已登录用户的特定链接?

时间:2012-11-18 16:47:29

标签: ruby-on-rails ruby-on-rails-3

我的导航部分有以下代码:

  <% 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 个答案:

答案 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_nameaction_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 / *