Ruby on rails 未定义的方法`find#u by';使用'model_class:false'时用于nil:NilClass`
Ruby on rails 未定义的方法`find#u by';使用'model_class:false'时用于nil:NilClass`,ruby-on-rails,neo4j.rb,Ruby On Rails,Neo4j.rb,nil:NilClass的未定义方法“find_by” 提取源(第38行附近): 我正在修改scaffold生成器,以自动处理:关系,因为有许多,并向用户端添加迭代器。 出于某种原因,所有生成的具有多个关系的类都存在此问题 在创建或更新时,不会创建记录(/modified),而是显示此错误 为了更好地衡量,以下是表单参数,尽管我在其中输入的内容无关紧要: { "utf8"=>"✓", "_method"=>"patch", "authentici
nil:NilClass的未定义方法“find_by”
提取源(第38行附近):
我正在修改scaffold生成器,以自动处理:关系,因为有许多
,并向用户端添加迭代器。
出于某种原因,所有生成的具有多个关系的类都存在此问题
在创建或更新时,不会创建记录(/modified),而是显示此错误
为了更好地衡量,以下是表单参数,尽管我在其中输入的内容无关紧要:
{
"utf8"=>"✓",
"_method"=>"patch",
"authenticity_token"=>"",
"tag"=>{"name"=>"Downloadable",
"normalized_name"=>"downloadable",
"tagged"=>[""]},
"commit"=>"Update Tag",
"id"=>"1604f0d6-4b8c-4305-8858-f2db53b1947d"
}
一些相关的东西,但我不确定为什么:
def tag_params
params.require(:tag).permit( :name, :normalized_name, tagged: [])
end
如果我取消了为标记数组的功能,它将停止错误。当然,因为它是一个有很多,所以我想要一个数组
编辑:在执行操作之前,我查看了来自的提示
def set_tag
@tag = Tag.find(params[:id])
end
编辑:在其他项目上工作了一段时间后,我又回到了这个话题,但它仍然困扰着我
以下是完整的输出(注意:来自的建议没有更改错误):
2016-07-16 22:23:55-0300时127.0.0.1的“/tags/e4c42c16-f547-4cc4-8d50-cbf85650563a”启动补丁
由TagsController处理#更新为HTML
参数:{“utf8”=>“✓", "真实性令牌“=>”b5EuyanawfG7lSCTt6aC1jAn8k66epnr5//keeic7gkhw6n4bwwjkehw4ob87n2ygpwujg2ynzwlzhwcvqepq=>,“tag”=>{“name”=>“Tag2”,“taged”=>[“”],“commit”=>“updatetag”,“id”=>“e4c42c16-f547-4c4-8d50-cbf85063a”
标记4ms MATCH(n:`Tag`),其中(n.uuid={n_uuid})返回n个顺序,按n.uuid LIMIT{LIMIT_1}{124;{:n_uuid=>“e4c42c16-f547-4cc4-8d50-cbf856550563a”,:LIMIT_1=>1}
标记#标记3ms匹配(标记6),其中(ID(标记6)={ID#u标记6})匹配(标记6)6}
在35毫秒内完成500个内部服务器错误
NoMethodError(未定义nil:NilClass的“find_by”方法):
app/controllers/tags_controller.rb:37:in'update'
rescues/layout中的Rendering/Users/josh/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.0/lib/action\u dispatch/middleware/templates/rescues/diagnostics.html.erb
Rendering/Users/josh/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.0/lib/action\u dispatch/middleware/templates/rescues//u source.html.erb
Rendered/Users/josh/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.0/lib/action\u dispatch/middleware/templates/rescues//u source.html.erb(5.1ms)
Rendering/Users/josh/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.0/lib/action\u dispatch/middleware/templates/rescues//u trace.html.erb
Rendered/Users/josh/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.0/lib/action\u dispatch/middleware/templates/rescues//u trace.html.erb(2.5ms)
Rendering/Users/josh/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.0/lib/action\u dispatch/middleware/templates/rescues//u request\u and\u response.html.erb
Rendered/Users/josh/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.0/lib/action\u dispatch/middleware/templates/rescues//u request\u and\u response.html.erb(2.7ms)
rescues/layout中的Rendered/Users/josh/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.0/lib/action\u dispatch/middleware/templates/rescues/diagnostics.html.erb(90.9ms)
编辑:它在一个相关项目中咬了我一口,我发现它发生在:
- 关系是
有许多
和模型类
为假
- 控制器允许参数作为数组,例如
:taged=>[]
- 提交的表单可以创建新节点,也可以在提供该参数的同时更新现有节点
在控制器中。。。检查更新前执行的操作(控制器顶部)
检查一下你的爱人
{
"utf8"=>"✓",
"_method"=>"patch",
"authenticity_token"=>"",
"tag"=>{"name"=>"Downloadable",
"normalized_name"=>"downloadable",
"tagged"=>[""]},
"commit"=>"Update Tag",
"id"=>"1604f0d6-4b8c-4305-8858-f2db53b1947d"
}
有没有。。在该操作中(在“查找方式”中)需要哪个选项?首先使用此空格检查它是否为空?您正在尝试更新nil
对象,首先需要在更新方法中找到该对象,然后更新它。您的@tag
在哪里定义?@vipin-不确定您的意思?@praveshkhattri-@tag
应该是使用提交的id
的实例。更新之前,@tag
是正确的,但是由于某种原因,如果@tag.update(tag_params)
请尝试在您的方法中打印@tag
,并在rails控制台中检查它。
Started PATCH "/tags/e4c42c16-f547-4cc4-8d50-cbf85650563a" for 127.0.0.1 at 2016-07-16 22:23:55 -0300
Processing by TagsController#update as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"b5EuyanawfG7lSCTt6aC1jAn8k66epnr5//KeeiC7GkhW6n4BWWJKeHW4OB87N2YGPwuJG2ynZwlzhWcvbQepQ==", "tag"=>{"name"=>"Tag2", "tagged"=>[""]}, "commit"=>"Update Tag", "id"=>"e4c42c16-f547-4cc4-8d50-cbf85650563a"}
Tag 4ms MATCH (n:`Tag`) WHERE (n.uuid = {n_uuid}) RETURN n ORDER BY n.uuid LIMIT {limit_1} | {:n_uuid=>"e4c42c16-f547-4cc4-8d50-cbf85650563a", :limit_1=>1}
Tag#tagged 3ms MATCH (tag6) WHERE (ID(tag6) = {ID_tag6}) MATCH (tag6)<-[rel1:`CONCEPTUAL_TAG`]-(result_tagged) DELETE rel1 | {:ID_tag6=>6}
Completed 500 Internal Server Error in 35ms
NoMethodError (undefined method `find_by' for nil:NilClass):
app/controllers/tags_controller.rb:37:in `update'
Rendering /Users/josh/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.0/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb within rescues/layout
Rendering /Users/josh/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.0/lib/action_dispatch/middleware/templates/rescues/_source.html.erb
Rendered /Users/josh/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.0/lib/action_dispatch/middleware/templates/rescues/_source.html.erb (5.1ms)
Rendering /Users/josh/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.0/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb
Rendered /Users/josh/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.0/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (2.5ms)
Rendering /Users/josh/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.0/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb
Rendered /Users/josh/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.0/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb (2.7ms)
Rendered /Users/josh/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.0/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb within rescues/layout (90.9ms)
{
"utf8"=>"✓",
"_method"=>"patch",
"authenticity_token"=>"",
"tag"=>{"name"=>"Downloadable",
"normalized_name"=>"downloadable",
"tagged"=>[""]},
"commit"=>"Update Tag",
"id"=>"1604f0d6-4b8c-4305-8858-f2db53b1947d"
}