2017-06-06 92 views
0

我遇到臭名昭着的无方法错误。我在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

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

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

class GenevaRecordsController < ApplicationController 
    #... 
end 

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

你需要采取Did you mean?节严重,

无论如何,如果你仔细看红宝石语法下面是类名的表示,

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,这与您不匹配model(resou rces)..

希望它有助于理解..

+0

而'root'genevarecords#index''也是。 – Gerry

+0

是的,谢谢.. :) –

+0

无休止地编辑你的答案使用类似的措辞和例子作为已经提供的答案是不是一个真正的社区活泼的方式去帮助人们... –