Rails - как вы отображаете данные из базы данных - PullRequest
4 голосов
/ 18 марта 2011

Я довольно новичок в Rails, и я просто пытаюсь отобразить user_id записи в базе данных sqlite3 на странице. Вот мой код:

Модель

class User < ActiveRecord::Base
  set_primary_key :user_id
  has_one :user_id
end

Контроллер

class HomeController < ApplicationController
  def index
    @users = User.find(0)
  end
end

View

<%= User.users.user_id %>

Я уверен, что совершаю глупую ошибку.

Ответы [ 4 ]

3 голосов
/ 18 марта 2011

Если вам нужен только UID для пользовательского объекта, достаточно стандартно позволить rails разобраться с этим для вас, поэтому вы просто генерируете необходимые атрибуты своей таблицы и не включаете user_id.Однако это может быть случай, когда вы хотите этот user_id, в этом случае игнорируйте то, что я только что сказал.Вам не нужно отношение has_one, если у вас нет другой модели с именем user_id (что, я думаю, возможно)

Метод индекса обычно предназначен для возврата всех пользователей или хотя бы подмножества (если вы используете пагинацию дляпример) Поэтому я бы рекомендовал использовать следующее в методе индекса

User.find :all  

Обратите внимание, что я снял скобки, это не имеет значения, но это соглашение о рельсах (это делает его более похожим наDSL).

Чтобы вернуть 1 пользователя, вам может потребоваться метод, подобный этому

# GET /posts/1
def show
   @user = User.first      
end

Но соглашение гласит, что идентификатор будет определяться отправленным URL, поэтому он может выглядеть примерно так

# GET /posts/1
def show
   @user = User.find params[:id]      
end

если затем вы получите доступ к URL-адресу, подобному указанному выше над методом show (/ posts / 1, где 1 - это идентификатор)

Представление для этого метода должно выглядеть примерно так:

<%= @user.user_id %>

Обратите внимание, что @user - это переменная-член, передаваемая в представление методом show, в данном случае это экземпляр пользователя с идентификатором 1, и вы получаете доступ к атрибуту user_id.этого экземпляра, поэтому вам не нужен User., так как это вызовет метод класса, а не метод экземпляра объекта пользователя.

Чтобы ответить на ваш конкретный вопрос, он должен выглядеть больше как

Модель

class User < ActiveRecord::Base
  set_primary_key :user_id
end

Контроллер

class HomeController < ApplicationController
  def show
    @user = User.first
  end 
end

Доступ к представлению шоу с помощью / users / 0

Представление будет содержать

<%= @user.user_id %>

EDIT:

Для отображения пользователя, вошедшего в систему, вам, вероятно, понадобится объект сеанса пользователя, который создается при входе пользователя в систему и уничтожается при выходе из системы.У пользовательского сеансового объекта должен быть связанный пользовательский объект, затем вы можете запросить объект user_session, для которого зарегистрирован пользователь.

Я настоятельно рекомендую использовать authlogic , достаточно просто знать, что происходитно делает трюк

2 голосов
/ 18 марта 2011

В качестве альтернативы на ваш взгляд:

<% User.all.each do |user| %>
  <%= user.id %>
<% end %>

Это выведет user_id для всех записей в User

0 голосов
/ 21 августа 2013

Для печати всей базы данных используйте;

Model.all

например

User.all
0 голосов
/ 18 марта 2011

Вы уверены, что User.find(0) здесь? Разве ID не начинается с одного? Чтобы быть в безопасности, сделайте

@user = User.first

На вид, вы бы сделали

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