2015-07-28 2 views
1

Я пытаюсь сделать вид в других контролерах посмотреть, но я получаю:вида Rendering от другого контроллера NilClass Ошибки

undefined method `each' for nil:NilClass 

Я рендеринг вида в «просмотрах/пользователях/шоу» как:

<%= render :template => 'groups/index' %> 

сам вид находится под 'Views/группы/индексом':

<% @groups.each do |group| %> 
    <li> 
    <%= group.name %> 
    <%= group.description %> 
    </li> 
<% end %> 

И моя группа контроллер для индекса выглядит это:

def index 
    @groups = Group.all 
end 

Я думаю, что это проблема с тем, как я рендерингом мнения, так как если я переменную экземпляром в моем контроллере индекса и вызвать его в представлении не появится. В моей базе данных есть записи в таблице Group.

Любая помощь будет оценена по достоинству.

Заранее спасибо.

ответ

1

Я думаю, этого должно быть достаточно, чтобы заменить template: параметром partial:.

Попробуйте это:

<%= render partial: 'groups/index' %> 

Вы должны переименовать/копировать groups/index.html.erb с groups/_index.html.erb

это работает только для рендеринга вид, но не будет выполнять функциональные возможности GroupsController.

Редактировать

Вам придется пересмотреть группы внутри UsersController

# UsersController 
def index 
    @groups = Group.all 
end 

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

# i.e. ApplicationController 
def groups 
    Group.all 
end 

внутри ApplicationController (или какой-то модуль вы хотите включить в разных контроллерах). Тогда вы могли бы назвать

# UsersController 
def index 
    @groups = groups 
end 

и еще <%= render partial: 'groups/index' %>

+0

Если я вношу изменения, то получаю другую ошибку: Отсутствующие частичные группы/_index –

+0

Возможно, потому что вам не хватает 'groups/_index.html.erb'. Вам нужно сделать это, потому что Rails только подберут частичное, если вы добавите файл с подчеркиванием '_'. –

+0

Если я переключу его на частичный, я получаю исходную ошибку. Кажется, он признает, что взгляд просто не отображает его. –

1

Изменение:

<%= render :template => 'groups/index' %> 

To:

<%= render 'groups/index' %> 

и убедитесь, что имя файла указательным действия _index.html.erb и не index.html.erb.

EDIT

Когда вы предоставляете вид, вы только делаете шаблон, это вызвать запрос на указательном действие. Вы должны определить @groups в действии вашего первоначального представления.

+0

Я все равно получаю ту же ошибку, если я сделаю это изменение. Благодарю. –

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