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。如果这也不起作用,请尝试在您的编辑视图中将&lt;% form_for @progress do |f| %&gt; 替换为&lt;% form_for :progress, :url =&gt; :action =&gt; "update" do |f| %&gt; map.resources :progresses 已经定义。我的编辑视图呈现部分表单“表单”。如果我用当前代码替换你的代码,它仍然不起作用(syntaxError)。 对不起,我错过了这个对象使用这个&lt;% form_for :progress, @progress, :url =&gt; :action =&gt; "update" do |f| %&gt; 太棒了。这行得通!非常感谢!你是救生员!你能解释一下为什么这应该改变并且默认选项还不够吗? (不需要,因为我已经接受了您的解决方案;))谢谢!

以上是关于RoR - 脚手架 - nil 的未定义方法“to_sym”:NilClass 只有编辑方法中的错误的主要内容,如果未能解决你的问题,请参考以下文章

nil的未定义方法`router_name':NilClass

Rails Event EventType模型关联 - nil的未定义方法`title':NilClass

nil:NilClass 的未定义方法“original_filename”

当#sum 没有 Nils 的数组时,“Nil:Class 的未定义方法‘零’”

nil:NilClass 的未定义方法“每个”,但我使用了实例变量

Cocoa Pods 的问题:nil:NilClass 的未定义方法“map”