Можете ли вы ограничить элемент link_to в Rails, чтобы он был видим, только если вы вошли в систему как администратор? - PullRequest
0 голосов
/ 26 августа 2018

Итак, я пытаюсь создать новый сайт-портфолио в Rails и пытаюсь разработать его административный компонент.В частности, есть функция блога, и я хочу быть единственным, кто может просматривать новые / редактировать / удалять / и т.д.функции на самом блоге.Если кто-то не вошел в систему как администратор, я хочу, чтобы он видел ту же страницу без возможности просмотра ссылок на эти параметры.

Прямо сейчас вид выглядит следующим образом:

<div class="content has-text-centered">
  <h1 class="title">Blog</h1>
</div>

<section class="section">
  <tbody>
    <% @posts.each do |post| %>
      <tr>
        <td><%= link_to 'Show', post %></td>
        <td><%= link_to 'Edit', edit_post_path(post) %></td>
      </tr>
    <% end %>
   </tbody>
</table>
<br>
</section>

<%= link_to 'New Post', new_post_path %>

... и я в основном пытаюсь довести его до точки, где на странице видны только первые три строкисамо по себе, если пользователь не вошел в систему как администратор.

Любой совет, как справиться с этим?Я использую Ruby 2.4.1, Rails 5.2.0 и Devise 4.4.3.Спасибо!

1 Ответ

0 голосов
/ 26 августа 2018

Использовать user_signed_in?метод и показывать этот блок только в том случае, если он возвращает true:

<div class="content has-text-centered">
  <h1 class="title">Blog</h1>
</div>

<% if user_signed_in? %>
  <section class="section">
    <tbody>
      <% @posts.each do |post| %>
        <tr>
          <td><%= link_to 'Show', post %></td>
          <td><%= link_to 'Edit', edit_post_path(post) %></td>
        </tr>
      <% end %>
     </tbody>
  </table>
  <br>
  </section>
<% end %>

Предполагается, что ваша пользовательская модель разработки - 'Пользователь'.Если это «Admin», то это будет

<% if admin_signed_in? %>

См. https://github.com/plataformatec/devise/wiki/How-To:-Add-sign_in,-sign_out,-and-sign_up-links-to-your-layout-template для получения дополнительной информации.

...