2016-08-25 4 views
0

Я хочу привести все ресурсы, а затем показать поле «nombre», которое находится в «curso». Один Curso имеет много ресурсов (у меня есть все has_many и belongs_to хорошо настроен.)Rails - ошибка при показе поля из класса

Для этого я сделать следующее:. resources_controller:

def index 
    @resources = Resource.all 
end 

index.html:

<% @resources.each do |resource| %> 
    <tr> 
     <td><%= resource.title %></td> 
     **<td><%= resource.curso.nombre %></td>** 
     <td><%= resource.cantidad %></td> 
     <td><%= link_to 'Show ', resource %></td> 
    <% else %> 

    <% end %> 

но когда я тестирую его, он дает мне следующую ошибку: «неопределенный метод« nombre »для nil: NilClass»

знаете ли вы, что это такое?

спасибо!

ответ

1

Это означает, что данный конкретно resource не связан ни с одной из ваших curso.

Если вы хотите, чтобы мандат, что каждый resource должен быть связан с любым из ваших curso в то время как это создание, вы должны иметь это в вашей Resource модели:

class Resource < ActiveRecord::Base 
    belongs_to :curso 

    # Validate the presence of curso in every resource. 
    validates :curso, presence: true 
end 

class Curso < ActiveRecord::Base 
    # When any curso is destroyed, all it's associated resources should be gone. 
    has_many :resources, dependent: :destroy 
end 

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

Кроме того, вы можете иметь уровень БД не имеет значения ограничение на curso_id Поле resources Таблица.

+0

У меня есть классы, как вы говорите, но не работает , – hernan

+0

После изменений он все равно не будет работать для существующих данных, которые у вас уже есть. Попробуйте удалить все ресурсы, cursos и добавить данные снова, через rails (если разработка env) – kiddorails

+0

да, его разработка env и я сброшу БД. но он не работает – hernan

0

Похоже на некоторые resources дон t have a curso`.

Просто проверьте, если curso существует перед вызовом nombre на нем:

<%= resource.curso.nombre if resource.curso %> 

или

<%= resource.curso && resource.curso.nombre %> 

или

<%= resource.curso.try(:nombre) %> 
Смежные вопросы