Ruby On Rails - неопределенный метод `id' для 4:Fixnum

Недавно я решил, что хочу перечислить все users в своем приложении Ruby On Rails — поскольку я не мог понять, как перечислить их каким-либо другим способом, я решил использовать частичные. У меня на странице администрирования есть следующее (только что подключенное к собственному контроллеру администрирования):

<%= render :partial => User.find(:all) %>

Затем у меня есть файл с именем _user.html.erb в папке просмотра моих пользователей. Это содержит следующее:

<ul>
<% div_for @user.object_id do %>
    <li><%= link_to user.username, user.username %></li>
<% end %>
</ul>

Когда приложение запускается и я захожу на страницу администрирования, я получаю следующую ошибку:

неопределенный метод `id' для 4:Fixnum

Он говорит, что это из-за этой строки (которая находится в частичном файле):

<% div_for @user.object_id do %>

Я не уверен, почему это происходит (и часами гуглил, чтобы найти результаты и найти только решения, которые не работают для меня). Я думаю, что это как-то связано с тем, что я использую переменную экземпляра @user, но я не совсем уверен.


person Community    schedule 09.02.2011    source источник


Ответы (4)


Вы получаете эту ошибку, потому что div_for ожидает активный объект записи в качестве аргумента, для которого он вызывает метод id. Вы передаете fixnum (результат @user.object_id), который не является активным объектом записи и не имеет метода id.

Так что передайте @user вместо @user.object_id и все заработает.

Также вы должны использовать user вместо @user, рельсы 3 больше не устанавливают переменные экземпляра для партиалов.

person sepp2k    schedule 09.02.2011
comment
Используя @user, я получаю сообщение об ошибке: Called id for nil, который ошибочно равен 4. Если вам действительно нужен идентификатор nil, используйте object_id - person ; 10.02.2011
comment
@ Joesavage1: Если вы используете rails 3, вам нужно использовать user вместо @user (а если это не так, вам все равно следует использовать user, потому что таким образом он будет работать с любой версией rails). - person sepp2k; 10.02.2011
comment
Большое спасибо! Использование пользователя вместо @user работает на пользу! :D - person ; 10.02.2011

Потеряйте часть .object_id. Я серьезно не могу понять, почему вы используете object_id! У вас есть для этого веская причина? В любом случае div_for оборачивает div вокруг объекта, так что оставьте часть .object_id!

person Gerry    schedule 09.02.2011
comment
Используя @user, я получаю сообщение об ошибке: Called id for nil, который ошибочно равен 4. Если вам действительно нужен идентификатор nil, используйте object_id - person ; 10.02.2011
comment
Тогда @user равен нулю. Снова проверьте свой контроллер, чтобы установить переменную экземпляра @user. Я предполагаю, что вы не хотите, чтобы @user был нулевым :) - person Gerry; 10.02.2011
comment
Поскольку это частичный пользователь, я предположил, что он уже знает, что такое @user. Поскольку я хочу перебирать пользователей, наверняка он уже должен знать, что такое каждый @user? Если мне нужно что-то добавить в контроллер - какой контроллер (пользователей или администрировать) - person ; 10.02.2011
comment
Нет, если вы не определили @user в своем контроллере, view/partial не может (и не должен) угадывать @user. Ответьте на следующие вопросы: 1. В каком действии контроллера связано ваше представление? 2. Используете ли вы ресурсы? 3. Пробовали ли вы рендерить :partial =› your_partial, :object =› @user ? Это говорит партиалу, с которым объект должен отображать - person Gerry; 10.02.2011

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

Пример

Я использую id вместо объекта user = User.first.

person Jigar Bhatt    schedule 20.12.2014

Попробуйте это, это сработало для меня.

@item.unit_of_measure.name 

вместо

@item.unit_of_measure_id.name
person Dhanshree    schedule 27.11.2017