所以我正在开展一个项目,其中有一些任务可以组成一个寻宝者。因此,当用户点击特定的搜索时,我希望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
但我不认为任务应该是一种方法。或者是吗?
关于我应该做什么的任何建议?
答案 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"
之类的事情时,这似乎非常简单,你不需要在其他地方做,你应该问问自己为什么。