Ошибка NameE в контроллере из-за неправильного синтаксиса в таблице соединений - PullRequest
0 голосов
/ 31 марта 2012

Итак, я работаю над проектом, в котором есть задачи, которые составляют охоту за мусором. Поэтому, когда пользователь нажимает на конкретную охоту, я хотел бы, чтобы файл show.html.erb отображал охоту, а также задачи, связанные с этой охотой. У меня есть модели охоты и задач, связанные через HuntTask.rb. Я создал HuntTask модель, основанную на предложении здесь: Имеет и принадлежит ко многим ошибкам - * _development.hunts_tasks 'не существует: , но я все еще не могу заставить контроллер поиска сделать чувство.

  def show
    @hunt = Hunt.find(params[:id])
    @title = @hunt.name    
    @tasks = @hunt.tasks.paginate(:page => params[:page]) 
  end

Но затем выдает эту ошибку:

    NameError in HuntsController#show
    uninitialized constant Hunt::Hunttask

Вот как выглядят мои модели:

class Hunt < ActiveRecord::Base
  has_many :hunttasks
  has_many :tasks, :through => :hunttasks
end

class Task < ActiveRecord::Base
  has_many :hunttasks
  has_many :hunts, :through => :hunttasks
end

class HuntTask < ActiveRecord::Base

  belongs_to :hunt, :class_name => "Hunt"
  belongs_to :task, :class_name => "Task"

Я почти уверен, что ошибка имени говорит мне, что Rails не может найти таблицу с именем hunt, что имеет смысл, потому что правильная таблица - "охотится". Но я не решаюсь изменить третью строка моего метода показа,

@tasks = @hunt.tasks.paginate(:page => params[:page]) 

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

Когда я добавляю s к (@tasks = @hunts.tasks.paginate(:page => params[:page]) ), я получаю NilClass ошибку.

NoMethodError in HuntsController#show
undefined method `tasks' for nil:NilClass

Но я не думаю, что задачи должны быть методом. Или это?

Какой-нибудь совет о том, что я должен делать?

1 Ответ

1 голос
/ 31 марта 2012

Я думаю, это должно быть:

class Hunt < ActiveRecord::Base
  has_many :hunt_tasks
  has_many :tasks, :through => :hunt_tasks
end

class Task < ActiveRecord::Base
  has_many :hunt_tasks
  has_many :hunts, :through => :hunt_tasks
end

class HuntTask < ActiveRecord::Base  
  belongs_to :hunt # the id for the association is in this table
  belongs_to :task
end

когда вы делаете что-то вроде belongs_to :hunt, :class_name => "Hunt" , что кажется довольно простым, и вам не нужно было ничего делать в другом месте, вы должны спросить себя, почему.

...