由于连接表中的语法错误,Controller中的NameError

时间:2012-03-31 19:15:25

标签: ruby-on-rails ruby-on-rails-3 rails-activerecord

所以我正在开展一个项目,其中有一些任务可以组成一个寻宝者。因此,当用户点击特定的搜索时,我希望show.html.erb文件显示搜索以及与该搜索相关的任务。我通过HuntTask.rb连接了狩猎和任务模型。我根据这里的建议创建了HuntTask模型:Has and Belongs to Many error - *_development.hunts_tasks' doesn't exist:,但是我仍然无法让狩猎控制器有意义。

  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的表,“这是有道理的,因为正确的表是”狩猎“。但我对改变犹豫不决我的show方法的第三行,

@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 个答案:

答案 0 :(得分:1)

我认为这应该是:

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" 之类的事情时,这似乎非常简单,你不需要在其他地方做,你应该问问自己为什么。