Неопределенный метод Rails для ошибки ni: NilClass?

У меня есть приложение rails, в котором у меня есть ассоциация has_many и own_to. Но у меня возникают проблемы при попытке получить элементы. Мои модели — это события, комментарии и голоса. События имеют несколько комментариев и голосов. Конечно, комментарии и голоса принадлежат одному событию.

Моя схема

    create_table "events",
        t.string   "etime"
        t.integer  "eid"
      end
    create_table "votes",
        t.integer  "eventid"
        t.string  "userid"
        t.integer  "event_id"
    end 

Ассоциации:

    class Event < ActiveRecord::Base
    has_many :comments
    has_many :votes
    end
    class Votes < ActiveRecord::Base
        belongs_to :event
    end

Я пытаюсь просмотреть все голоса за события. Действия контроллера:

    @events = Event.all
@events.each do |event|
    event.votes.each do |vote|
        respond_to do |format|
            format.html
        end
    end 
end

Вид и строка ошибки:

    <%= @vote.userid %>

Я получаю сообщение об ошибке «Неопределенный метод «userid» для голосования». В моем контроллере я отображаю свой eventid, и это сработало. Так что это кажется проблемой, когда я делаю это в представлении. Есть идеи, что я могу делать неправильно? я совсем запуталась в этом


person user1364813    schedule 19.06.2012    source источник
comment
Это должно быть event_id, но вы действительно пытаетесь показать идентификатор или голосование?   -  person Dave Newton    schedule 20.06.2012
comment
Я пытаюсь показать голосование. У меня было другое поле в моей модели голосования по идентификатору пользователя. Я пытаюсь отобразить как event_id, так и userid. Я удалил идентификатор пользователя, так как раньше у меня были проблемы с другим кодом. Но я снова добавил. Та же ошибка для этого (если я удалю voice.eventid)   -  person user1364813    schedule 20.06.2012


Ответы (2)


Может быть так же просто, как использовать event_id вместо eventid.

Всегда стоит запустить rails console и поиграть там. Обычно вы можете использовать автозаполнение методов.

v = Vote.new
v.event<tab to get options>
person z5h    schedule 19.06.2012
comment
Нет, все та же ошибка. Он работает в контроллере, но когда я перехожу к своему представлению, он терпит неудачу - person user1364813; 20.06.2012

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

В стандартных случаях все модели имеют первичные ключи в виде id, просто id.

Для связи с другой моделью, например, с ассоциацией belongs_to :event, вашей модели голосования необходим столбец event_id. Это стандарты рельсов

Предположим, что ваши ассоциации/столбцы верны. Ошибка, которую вы получаете, связана с тем, что ваш объект @vote равен nil , в вашем контроллере вам нужно назначить/инициализировать переменную @vote, чтобы использовать ее в представлении, которое вы не используете кажется, не делает.

person Rishav Rastogi    schedule 19.06.2012
comment
После того, как ассоциация была завершена, event_id был создан автоматически. Но я добавил поле в свой код. Я добавил переменную @vote, но не помогло - person user1364813; 20.06.2012