2
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'吗?尽管似乎调用了“编辑视图”......在我看来,这也许是没有填写值的原因......

我的解决方案可能是什么?

4

1 回答 1

3

我将在这里建议两步调试:

  1. 从编辑视图中删除所有代码并在其中添加一些纯文本,然后在浏览器中访问您的页面,看看您是否收到任何错误或新错误或没有错误

  2. 如果您遇到任何新错误,那么它可能会帮助您解决问题或在您的控制器编辑操作中引发@progress 以查看它是否被设置

    def edit
      @progress = Progress.find(params[:id])
      raise @progress.inspect
    end
    

这两个步骤可能会帮助您解决问题。

于 2010-02-17T04:52:01.580 回答