Я использую рельсы 2.3.5 и ruby 1.8.7. Я строю простой менеджер TODO. Где у меня есть задачи, которые принадлежат пользователю, и у пользователя есть много задач.
Я использую плагин acts_as_taggable_on_steroids
для тегирования задач и restful_authentication plugin
для регистрации и управления пользователями.
Я получаю странную ошибку, которая гласит «Can't dup NilClass» в представлении действия с индексом. Это то, что код контроллера -
@tasks = current_user.tasks
Ошибка возникает, когда я перебираю @tasks
в представлении. Вот когда я делаю @tasks.each do |task|
Теперь, когда я заменяю код контроллера на этот
@tasks = Task.find(:all, :conditions => {:user_id => current_user.id})
Который на самом деле выбирает те же записи. Это происходит только в режиме разработки. Я предполагаю, что это как-то связано с кэшированием или загрузкой.
Что может быть не так? Я сталкиваюсь с этой проблемой впервые.
EDIT
Хорошо, это определенно проблема с кэшированием. Если я сделаю
config.cache_classes = true
в production.rb, такая же ошибка возникает и в производственном режиме. Но как мне это исправить сейчас? Потому что я не хочу перезагружать сервер для каждого изменения, которое я делаю в моделях / контроллерах.
EDIT
Вот как выглядит моя модель пользователя
class User < ActiveRecord::Base
has_many :tasks
has_many :projects
# There are some validations and standard methods that resful authentication
# provides that I am not showing here
end
А вот так выглядит модель Task.
class Task < ActiveRecord::Base
belongs_to :bin
belongs_to :project
belongs_to :user
acts_as_taggable
def tag_list
super.join(', ')
end
end
Метод индексации контроллера задач выглядит следующим образом
def index
@tasks = current_user.tasks
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @tasks }
end
end
Надеюсь, это поможет.