【问题标题】:Changing nav-bar links according to whether a user has created a profile or not (RoR)根据用户是否创建配置文件更改导航栏链接 (RoR)
【发布时间】:2015-06-02 11:07:51
【问题描述】:

我正在制作一个 Rails 应用程序,并创建了一个运行良好的简单导航栏。我已经设计并创建了一个我希望用户在注册后创建的配置文件模型,并且(我相信)我已经正确地建立了必要的关联。

当新用户首次登录时,我希望使用 new_profile_path 在导航栏中显示“创建个人资料”链接,但是一旦该特定用户创建了他/她的个人资料,我希望“创建个人资料”更改为“查看个人资料”并永久保持这种状态,这应该重定向到 profile_path。

我目前在导航栏中的代码如下:

<ul>
         <li><%= link_to root_path do %>
                <i class="fa fa-home"></i>Main
            <% end %>
        </li>
        <% if current_user.profile %>
         <li><%= link_to profile_path(current_user.profile) do %>
                    <i class="fa fa-user"></i>Employee Profile<i class="fa fa-sort-desc"></i>
                <% end %>
            <% end %>
            <% else %>
            <li><%= link_to "New Profile", new_profile_path %></li>
                <ul>
                    <li><%= link_to "Tasks / Activities", tasks_path %></li>
                    <li><%= link_to "Vacations", vacations_path %></li>
                </ul>
         </li>
         <li><%= link_to projects_path do %>
                <i class="fa fa-building-o"></i>Projects<i class="fa fa-sort-desc"></i>
                <% end %>
            <ul>

但是,即使在创建新配置文件之后,“创建配置文件”链接仍然存在。我怎样才能解决这个问题?

【问题讨论】:

  • 您如何将 after_sign_up_path 重定向到 new_profile_path?
  • 除了 de User 和 Profile 模型,还可以从命令行中为代码 User.find(ID).profile 添加结果
  • @rashed 首先,请更正您的代码,因为它包含 &lt;% end %&gt;&lt;/li&gt; 的一些不匹配项

标签: ruby-on-rails ruby if-statement model devise


【解决方案1】:

试试这个:

<% if !current_user.profile.blank? %>
  <%= link_to profile_path(current_user.profile) do %>
         <i class="fa fa-user"></i>Employee Profile<i class="fa fa-sort-desc"></i>
      <% end %>
<% else %>
  <%= link_to "New Profile", new_profile_path %>
<% end %>

【讨论】:

  • 感谢您的回复。我尝试实现您提供的代码,但是我现在收到一个新错误:Pages#main undefined method `exists?'中的 NoMethodError对于 nil:NilClass 任何想法如何纠正这个问题?
  • 好的,新代码似乎纠正了错误,但是我仍然面临同样的初始问题,即即使我创建配置文件并提交,新配置文件链接也不会改变,它仍然存在那里。我想知道是否存在关于保存并链接到用户的配置文件的问题。会是这样吗?如果是这样,您对如何解决它有什么建议吗? (对不起,这是我第一次制作 Rails 应用,请原谅我的无知)
  • 用必要的代码更新你的问题,以便我可以调试它。
  • 没关系,我发现了问题所在。事实证明,当我提交个人资料信息时,它并没有链接到那个特定的用户。无论如何,感谢您解决我的导航栏链接问题,您提供的代码解决了问题:)
【解决方案2】:

您的错误在这里&lt;% end %&gt;&lt;% else %&gt;。在else 之前关闭if 测试。结果:&lt;%= link_to "New Profile", new_profile_path %&gt; 始终显示!

去掉第 10 行就可以了。

【讨论】:

    猜你喜欢
    • 2022-08-16
    • 1970-01-01
    • 1970-01-01
    • 2020-12-15
    • 1970-01-01
    • 2023-03-11
    • 2015-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多