ruby-on-rails 如何使用验证逻辑创建两个不同的link_to位置(Ruby on Rails & Devise)

dldeef67  于 2022-12-15  发布在  Ruby
关注(0)|答案(1)|浏览(118)

第一篇关于StackOverflow的文章。:)我是Ruby on Rails的新手(一般来说也是编码新手),我最难理解的是文档。所以我确信这个答案就在某个地方,但如果是的话,我没有找到/理解它。
我试图创造两种选择:
1.* * 登录前单击徽标-转到root_path**
1.* * 登录后单击徽标-转到alerts_path**
下面的解决方案是可行的,但是必须有一种更好、更整洁、更简洁的方法来编写它,而不是重复所有的代码。

<% if user_signed_in? %>
  <%= link_to alerts_path, class: "d-flex flex-row navbar-brand", input_html: {data: {bs_toggle: "offcanvas", bs_target: "#offcanvas"}} do %>
    <%= cl_image_tag("ouicity_logo_j5rhro") %>
    <h2 id="logo" class="ms-3">ouicity</h2>
  <% end %>
<% else %>
  <%= link_to root_path, class: "d-flex flex-row navbar-brand", input_html: {data: {bs_toggle: "offcanvas", bs_target: "#offcanvas"}} do %>
    <%= cl_image_tag("ouicity_logo_j5rhro") %>
    <h2 id="logo" class="ms-3">ouicity</h2>
  <% end %>
<% end %>
1szpjjfi

1szpjjfi1#

一个可能的简单重构(DRY代码)就是为url更改添加逻辑(使用三元运算符):

<%= link_to user_signed_in? ? alerts_path : root_path, class: "d-flex flex-row navbar-brand", input_html: {data: {bs_toggle: "offcanvas", bs_target: "#offcanvas"}} do %>
  <%= cl_image_tag("ouicity_logo_j5rhro") %>
  <h2 id="logo" class="ms-3">ouicity</h2>
<% end %>

您最终可以将此逻辑提取到一个帮助器中,以使视图更简单:
x一个一个一个一个x一个一个二个x

相关问题