2012-03-31 48 views
0

所以我工作的地方有构成寻宝任务的项目。因此,当用户点击某个特定的狩猎时,我希望show.html.erb文件显示狩猎以及与该狩猎相关的任务。我有通过HuntTask.rb连接的狩猎和任务模型。我创建了HuntTask模型,基于这里的建议:Has and Belongs to Many error - *_development.hunts_tasks' doesn't exist:,但我仍然无法让寻线控制器合理。由于错误的语法NameError在控制器连接表

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" 

我敢肯定的是,名称错误是告诉我,滑轨不能找到一个名为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

我想这应该是:

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" 这似乎很直接,你并不需要做到万无一失

,你应该问自己为什么。

+0

你说得对。我错过了下划线。引发错误的行是这一行:'@tasks = @ hunt.tasks.paginate(:page => params [:page])''。 – 2012-03-31 19:53:55

相关问题