Я новичок в Rails, и у меня есть несколько проблем с тем, чтобы попасть в канавку. Я пытаюсь отобразить пользователей и их идентификаторы, но при попытке отобразить идентификатор получаю сообщение об ошибке:

undefined method `id' for #<Person::ActiveRecord_Relation:0x007fc86af3b080>

В качестве теста я удалил часть идентификатора и просто дважды отобразил p.name, и вот результат:

Users

ID  User
Person  Person
Person Person Person Person Person Person Person Person Person Person Person Person Person Person Person Person Person Person

Я заметил, если я делаю что-то вроде

<% p = Person.find(1) %>
<% p.name %>

Я вернусь:

Billy

Моя третья и последняя проблема - это таблица, первые две записи остаются в таблице, а остальные просто перемещаются по экрану. Я не часто использую таблицы, это не такая уж большая проблема для меня, я уверен, что со временем смогу разобраться в этой части.

Код, который я использую для возникновения всех этих проблем, приведен ниже:

index.html.erb

Пользователей

<table>
    <tr>
        <th>ID</th>
        <th>User</th>
    </tr>
    <% p = Person.all %>
    <% p.each do |person| %>
        <tr>
            <td style="width: 50px;"><%= p.id %></td>
            <td style="width: 50px;"><%= p.name %></td>
        </tr>
</table>


<% end %>

person.rb

class Person < ActiveRecord::Base
    validates :name,
    presence: true
end

< Сильный > База данных:

mysql> desc people;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(11)     | NO   | PRI | NULL    | auto_increment |
| name  | varchar(20) | YES  |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)


mysql> select * from people;
+----+-------+
| id | name  |
+----+-------+
|  1 | Billy |
|  2 | Billy |
|  3 | Billy |
|  4 | Billy |
|  5 | Billy |
|  6 | Billy |
|  7 | Billy |
|  8 | Billy |
|  9 | Billy |
| 10 | Billy |
+----+-------+
10 rows in set (0.00 sec)

Любая помощь приветствуется. Спасибо.

1
Zac1989 16 Дек 2014 в 00:39

2 ответа

Лучший ответ

Попробуйте это ввиду:

<table>
<tr>
    <th>ID</th>
    <th>User</th>
</tr>
<% p = Person.all %>
<% p.each do |person| %>
    <tr>
        <td style="width: 50px;"><%= person.id %></td>
        <td style="width: 50px;"><%= person.name %></td>
    </tr>
<% end %>
</table>

p - это массив всех лиц вам следует заменить p.id и p.name на person.id и person.name, потому что person представляет один элемент из массива в цикле each

1
blluf 16 Дек 2014 в 00:51
1
Вы исправили форматирование таблицы, хотя я все еще получаю тот же результат, что и раньше. Смотрите изображения: i.gyazo.com/bcc4a2f44a5c295ab672b7b736b84720.png i.gyazo.com/77ceabababd1e905fa052c342d33a2869b.png
 – 
Zac1989
16 Дек 2014 в 00:55
2
Судя по снимку экрана, вы имеете в виду Person.id в столбце таблицы, тогда как оно должно быть в нижнем регистре как person.id.
 – 
TK-421
16 Дек 2014 в 01:01
1
Рад помочь. Ваш вопрос был хорошо задокументирован, кстати. (И приятно видеть реальную учетную запись в наши дни, а не пользователя 92415638396425. ;)
 – 
TK-421
16 Дек 2014 в 01:12
<h1> Users </h1>

<table>
<tr>
    <th>ID</th>
    <th>User</th>
</tr>
<% p = Person.all %>
<% p.each do |person| %>
    <tr>
        <td style="width: 50px;"><%= person.id %></td>
        <td style="width: 50px;"><%= person.name %></td>
    </tr>
<% end %>
</table>

Это заставило его работать отлично. Спасибо всем.

1
Zac1989 16 Дек 2014 в 01:09