неопределенный метод «синхронизировать» в отношении модели «один ко многим»

У меня есть простые отношения 1: n в рельсах 4. Темы и категории. У темы есть одна категория, а у категории много тем.

тема.rb

class Topic < ActiveRecord::Base

  belongs_to :category

end

категория.rb

class Category < ActiveRecord::Base

  has_many :topics

end

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

category_id

Теперь, когда я делаю некоторые стандартные вещи, у меня возникает следующая проблема:

Это прекрасно работает, когда я перечисляю все темы, принадлежащие к определенной категории:

<% @category.topics.each do |topic| %>
...
<% end %>

Но делаем это (просто показываем ярлык категории из категории, которая принадлежит теме):

<%= @topic.category.slug %>

рисует эту ошибку:

undefined method `synchronize' for nil:NilClass

Что я делаю неправильно?


person DonMB    schedule 20.10.2013    source источник


Ответы (2)


Я думаю, что источником вашей ошибки на самом деле является то, что вы ссылаетесь на @topic при получении слага категории, но передаете переменную topic в свой блок, поэтому @topic равно нулю.

person Jonathan Bender    schedule 21.10.2013
comment
Нет, эти два блока отличаются друг от друга, извините, если это непонятно из моего описания. <%= @topic.category.slug %> относится к переменной экземпляра @topic = Topic.find_by_id(params[:id]) и по умолчанию НЕ равен нулю, потому что <%= @topic.id %> работает, например. - person DonMB; 21.10.2013

Проблема заключалась в драгоценном камне friendly_id. я должен был использовать

gem 'friendly_id', '~> 5.0.0'

работать с рельсами 4.

Теперь он работает отлично. Благодаря https://github.com/norman/friendly_id#what-changed-in-version-50

person DonMB    schedule 21.10.2013