【问题标题】:NameError in Controller due to wrong syntax in join table由于连接表中的语法错误,控制器中出现 NameError
【发布时间】:2012-03-31 19:15:24
【问题描述】:

所以我正在开展一个项目,其中有一些任务构成了寻宝游戏。因此,当用户单击特定搜寻时,我希望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 的表,这是有道理的,因为正确的表是“hunts”。但我犹豫要更改第三个表我的显示方法的行,

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

因为我想指定@tasks 方法应该拉取与显示的此特定搜寻相关的所有任务,而不是所有搜寻。我想我只是不明白我在@tasks 中使用的语法。

当我将s 添加到(@tasks = @hunts.tasks.paginate(:page =&gt; params[:page]) ) 时,我收到NilClass 错误。

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

但我不认为任务应该是一种方法。还是这样?

对我应该做什么有什么建议吗?

【问题讨论】:

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


    【解决方案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" 的事情时,看起来很简单,而且你不需要在其他地方做,你应该问问自己为什么。

    【讨论】:

    • 你是对的。我错过了下划线。引发错误的那一行是:@tasks = @hunt.tasks.paginate(:page =&gt; params[:page])
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-21
    • 1970-01-01
    • 2019-09-18
    • 1970-01-01
    • 1970-01-01
    • 2013-06-22
    • 2013-12-28
    相关资源
    最近更新 更多