RoR - 脚手架 - nil 的未定义方法“to_sym”:NilClass 只有编辑方法中的错误
Posted
技术标签:
【中文标题】RoR - 脚手架 - nil 的未定义方法“to_sym”:NilClass 只有编辑方法中的错误【英文标题】:RoR - Scaffolding - unedfined method 'to_sym' for nil:NilClass only an error in the edit method 【发布时间】:2011-01-17 16:58:59 【问题描述】:undefined method `to_sym' for nil:NilClass
我只在我的 nifty_scaffold 的编辑页面中出现此错误。
这是 _form.html.erb
<% form_for @progress do |f| %>
<%= f.error_messages %>
<p>
<%= f.label :date %><br />
<%= f.date_select :date %>
</p>
<p>
<%= f.label :description %><br />
<%= f.text_area :description %>
</p>
<p>
<%= f.label :weight %><br />
<%= f.text_field :weight %>
</p>
<p>
<%= f.label :fatpercentage %><br />
<%= f.text_field :fatpercentage %>
</p>
<p>
<%= f.label :height %><br />
<%= f.text_field :height %>
</p>
<p><%= f.submit "Submit" %></p>
<% end %>
这是edit.html.erb
<% title "Edit Progress" %>
<%= render :partial => 'form' %>
这是我的控制器:
class ProgressesController < ApplicationController
def new
@progress = Progress.new
end
def create
@progress = Progress.new(params[:progress])
if @progress.save
flash[:notice] = "Successfully created progress."
redirect_to progresses_url
else
render :action => 'new'
end
end
def edit
@progress = Progress.find(params[:id])
end
def update
@progress = Progress.find(params[:id])
if @progress.update_attributes(params[:progress])
flash[:notice] = "Successfully updated progress."
redirect_to progresses_url
else
render :action => 'edit'
end
end
def index
@progresses = Progress.all
end
end
可能出了什么问题?我似乎找不到我的错误:-S。 似乎它: - 正确获取数据 - 无法将 db-values 插入“编辑视图”字段。
我在脚手架中使用 :float、:string 和 :date 作为数据类型。
仅针对已完成的帖子,这是我的错误: NoMethodError in Progresses#edit
Showing app/views/progresses/edit.html.erb where line #3 raised:
undefined method `to_sym' for nil:NilClass
Extracted source (around line #3):
1: <% title "Edit Progress" %>
2:
3: <% form_for @progress do |f| %>
4: <%= f.error_messages %>
5: <p>
6: <%= f.label :date %><br />
在第 6 行代码日志结束...
编辑: 这似乎是我的 routes.rb 中的错误。 这是目前的评论:
map.edit_progress "edit_progress", :controller => "progresses", :action => "edit"
当我取消注释时,它也会在我的索引视图中出现错误。
出于某种原因,这被称为: 'http://127.0.0.1:3001/progresses/1/edit',不应该是:'http://127.0.0.1:3001/progresses/edit/1' 吗? 即使似乎调用了“编辑视图”...在我看来,这也许就是未填写值的原因...
我的解决方案是什么?
【问题讨论】:
【参考方案1】:我会在这里建议两步调试:
从编辑视图中删除所有代码并在其中添加一些纯文本,然后在浏览器中访问您的页面并查看是否出现任何错误或新错误或没有错误
如果您遇到任何新错误,那么它可能会帮助您解决问题或在您的控制器编辑操作中引发@progress 以查看它是否正在设置
def edit
@progress = Progress.find(params[:id])
raise @progress.inspect
end
这两个步骤可能会帮助您解决问题。
【讨论】:
当我用纯文本替换“编辑视图”时没有收到错误消息。并通过 raise @progress.inspect 我收到所有值(即:# 您的config/routes.rb
文件中是否设置了进度资源?如果没有,请添加map.resources :progresses
。如果这也不起作用,请尝试在您的编辑视图中将<% form_for @progress do |f| %>
替换为<% form_for :progress, :url => :action => "update" do |f| %>
map.resources :progresses 已经定义。我的编辑视图呈现部分表单“表单”。如果我用当前代码替换你的代码,它仍然不起作用(syntaxError)。
对不起,我错过了这个对象使用这个<% form_for :progress, @progress, :url => :action => "update" do |f| %>
太棒了。这行得通!非常感谢!你是救生员!你能解释一下为什么这应该改变并且默认选项还不够吗? (不需要,因为我已经接受了您的解决方案;))谢谢!以上是关于RoR - 脚手架 - nil 的未定义方法“to_sym”:NilClass 只有编辑方法中的错误的主要内容,如果未能解决你的问题,请参考以下文章
nil的未定义方法`router_name':NilClass
Rails Event EventType模型关联 - nil的未定义方法`title':NilClass
nil:NilClass 的未定义方法“original_filename”
当#sum 没有 Nils 的数组时,“Nil:Class 的未定义方法‘零’”