2015-11-29 3 views
0

Пользователь и project_model имеют ассоциацию habtm, и это часть индекса project_models, и каждый из них предназначен для отображения списка отображаемых объектов project_models.users. Так просто, как это происходит, по какой-то причине он продолжает бросать ошибку:Попытка перечислить всех пользователей принадлежит к этой модели проекта

Редактировать: Забыл упомянуть, что у каждого пользователя есть много деталей, один из которых является их электронной почтой, которую я пытаюсь отобразить в список.

 @members = project_model.users.all 
    <% @members.each do |member| %> 
    <%= member.email %> 
    <% end %> 

Это говорит мне .each - это неопределенный метод для nil: NilClass. Я не понимаю, что я сделал неправильно. Неправильно ли настроена таблица соединений?

class CreateJoinTableProjectModelUser < ActiveRecord::Migration 
    def change 
    create_join_table :users, :project_models do |t| 
    # t.index [:user_id, :project_model_id] 
    # t.index [:project_model_id, :user_id] 
    end 
    end 
    end 

Или это что-то еще? Я новичок в Rails (первый раз должен его использовать), поэтому, пожалуйста, простите меня, если вопросы немного разрядились.

+0

на это нельзя ответить должным образом без использования метода контроллера. Где вы объявляете своих @members? И где вы ссылаетесь на этот экземпляр? Вы уверены, что действие контроллера соответствует файлу просмотра? –

+0

Ну, это объявлено в представлении, так как все объекты project_models хранятся в моделях @project_models в контроллере, но project_model.users предназначен для каждого конкретного экземпляра, поэтому я думал, что делать это в контроллере не получится. Разве невозможно объявить что-то в этом, потому что я думал, что мы можем? Я уверен, что видел код, где люди объявили их вне контроллеров? – gllwrnce

+0

, если это '@ project_models' в контроллере, почему он называется' project_models' в поле зрения? Это возможно, но это нарушает логику Rails. –

ответ

1

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

undefined method `each' for nil:NilClass 

Вы вызова each метод на что-то (@members), которая равна нулю. Это означает, что он не был определен в контроллере. Поскольку он не был определен, вы получаете ошибку undefined method.

Рекомендуется проверить, когда вы вызываете переменную экземпляра в своем представлении, что она также определена в вашем контроллере.

Также можно получить эту ошибку, если вы вызываете частный метод в своем контроллере.

+0

Когда я определяю его в контроллере, просто ли я вставляю элементы в контроллер? Или члены = и т. Д. Поскольку каждый project_model должен предоставить свой собственный список участников, или вы говорите, что я должен сделать members = users.all и иметь его там, где каждая модель проекта проверяет, принадлежит ли член к его project_models .sers, а затем отображает это? Кроме того, когда я смотрел на другие сообщения и руководства, я видел, как многие из этих переменных экземпляра тоже были объявлены здесь? – gllwrnce

Смежные вопросы