2016-04-14 2 views
0

У меня есть страница welcome.html.erb с welcome_controller. На этой странице я пытаюсь сделать частичное, что принадлежит модели Screen, но возвращает NoMethodError: undefined method 'each' for nil:NilClass. Вот код:NoMethodError при рендеринге частичного

welcome.html.erb:

<%= render 'screens/all` %> 

_all.html.erb:

<%= @screens.each do |screen| %> 
    <%= link_to screen do %> 
     <img src=""> 
    <% end %> 
<% end %> 

screens_controller.rb:

def all 
    @screens = Screen.all.order('created_at ASC') 
end 
+1

«экраны/all' - это опечатка (я имею в виду окончание цитаты) – Ilya

ответ

1

Эй, ты поступаешь неправильно.

def all 
    @screens = Screen.all.order('created_at ASC') 
end 

Этот метод вы имеете в screens_controller.rb

Вам нужно написать экземпляр внутри приветствия метода в welcome_controller.rb, Таким образом, он не будет давать ошибку вам.

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

<%= render :partial =>'screens/all`, :locals => {:screens => @screens} %> 
+0

Кроме того, в частичном' @ screens' бы стать 'экранами' тогда – Rashmirathi

+0

Право - Рашмиратхи –

+0

@Bharat спасибо! поэтому в 'welcome_controller.rb' я должен написать тот же метод, что и в' screen_controller', я правильно понял? – AlexNikolaev94

1

Переменная экземпляра вы используете (@screens) должен исходить из любого действия контроллера делает welcome.html.erb. Затем вы должны передать его явным образом в качестве локального (например, в его ответе).

0

Вы забыли передать переменную

Попробуйте использовать

<%= render 'screens/all',:screens => @screens %> 
Смежные вопросы