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