Ruby on rails没有方法错误。

时间:2017-06-06 03:49:10

标签: ruby-on-rails

我遇到了臭名昭着的No Method Error。我已经通过STOF中的一些示例来解决这个问题但我无法在代码中看到错误。我已经检查过rake路由符合我认为应该发生的路径,并且使用routes.db文件中的资源提供的路径似乎是正确的。我知道我错过了一些小细节,但我不能为我的生活现在看到它。任何帮助,将不胜感激。

Error Screenshot

我的控制器代码:

class GenevarecordsController < ApplicationController

  def index
    @genevarecords = GenevaRecord.all.page(params[:page]).per(5)
  end

  def new
    @genevarecord = GenevaRecord.new
  end

end

我的路线:

Rails.application.routes.draw do

  root 'genevarecords#index'

  resources :genevarecords

end

2 个答案:

答案 0 :(得分:2)

您的模型与控制器/路线之间存在命名差异。 您的模型为GenevaRecord,强调为geneva_record。但是,您的控制器在开头只有一个大写字母:Geneverecords,其中强调为genevarecords。因此,当您将模型传递给表单时,它会尝试使用与模型具有相同命名格式的控制器/路由助手,即geneva_records_controller即。 GenevaRecordsController

您需要做的是将您的控制器和路线匹配为与您的模型相同的命名格式:

class GenevaRecordsController < ApplicationController
  #...
end

Rails.application.routes.draw do
  #...
  resources :geneva_records
end

答案 1 :(得分:0)

您需要认真对待Did you mean?部分,

无论如何,如果仔细查看ruby语法,下面是类名的表示,

AbcDef和等效的蛇案例是abc_def

在你的情况下,

您的模型的名称为GenevaRecord,但您的控制器为GenevarecordsController

将其更改为GenevaRecordsController,您还需要在路线中匹配它的等效蛇案例......

Rails.application.routes.draw do

  root 'geneva_records#index'

  resources :geneva_records

end

因此,当您将@genevarecord传递给表单时,它会初始化为GenevaRecord.new并搜索未定义的geneva_records_path,因为您已将其定义为genevarecords_path并且不会# 39; t匹配你model(资源)..

希望它有助于理解..