Ruby on Rails - отображение имен пользователей на новой странице / контроллере - PullRequest
0 голосов
/ 05 декабря 2018

ВОПРОС: Как я могу на новой странице с новым контроллером отображать информацию из моей базы данных?

Итак, я создаю страницу, на которой будет отображаться список пользователей иих имена в таблице.

Я создал эту новую страницу, используя:

rails generate controller Information users

И создал соответствующие маршруты.Теперь на html.erb этой страницы (users.html.erb):

У меня есть:

<h1>Information#users</h1>
<p>Find me in app/views/information/users.html.erb</p>

Я хочу сделать что-то подобное на странице:

<%= @users.name %>

Для отображения имени пользователя.

Мой контроллер:

class InformationController < ApplicationController
  def users
    @current_user = current_user
  end
end

И база данных схемы пользователя:

  create_table "users", force: :cascade do |t|
    t.string   "email",                  default: "", null: false
    t.string   "encrypted_password",     default: "", null: false
    t.string   "phone_number"
    t.string   "name"
  end

Так что должноЯ делаю, чтобы страница users.html.erb отображала информацию о пользователях на этой странице?

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Вы хотите отобразить список пользователей.Для этого сначала соберите всех пользователей в users действии InformationController, которое теперь выглядит как

class InformationController < ApplicationController
  def users
    @users = User.all
  end
end

Теперь в users.html.erb вам придется пройти через каждого пользователя, чтобы отобразить его в таблице

<h1>Information#users</h1>
<table>
  <tr>
    <th>Username</th>
  </tr>
  <% @users.each do |user| %
    <tr>
      <td><%= user.name %></td>
    <tr>
  <% end %>
</table>  
0 голосов
/ 05 декабря 2018

Выберите лучшее имя для вашего контроллера и переменную экземпляра

Я буду очень осторожен с вашей схемой именования.Ваше действие контроллера называется users, однако вы отображаете только информацию о current_user.Ваша переменная экземпляров снова является плюрализованной, но она должна быть единственной.

Это должно быть так:

<%= @current_user.name %>

И тогда это:

class InformationController < ApplicationController
  def users
    @current_user = current_user # should work if you are using the devise gem
  end
end

Замечание Re: ОграничениеЗаражение внешних зависимостей в вашем приложении

Если вы используете гем devise, у него есть очень удобный вспомогательный метод, который называется current_user в точности так, как вы указали.Установите для него переменную экземпляра, как указано выше, и используйте переменную @current_user во всех ваших представлениях.Зачем?По академическим и теоретическим причинам, когда вы начинаете свою карьеру программиста в rails: devise - это внешняя зависимость - камень может изменить работу или работу вспомогательного метода current_user, он может изменить свое имя на другое.Если и когда это произойдет, вы захотите ограничить любые негативные последствия для вашего приложения rails.Единственное изменение, которое вам нужно будет сделать, будет в контроллере к этой строке @current_user = current user # i.e. the devise helper method, а не в представлениях, что было бы в случае, если бы вы использовали current_user повсеместно.Конечно, изменения в этом происшествии микроскопические, но это решение, которое вы должны знать о том, что вы делаете, а не пассивно.

Резюме: используйте гем devise (вероятно, самый популярный гем аутентификации).там), и это должно быть тривиально легко.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...