RoR - Scaffolding - неопределенный метод 'to_sym' для nil: только в NilClass ошибка в методе редактирования - PullRequest
2 голосов
/ 17 февраля 2010
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 в поля «edit view».

Я использую: float,: string и: date в качестве типов данных в скаффолде.

Просто для завершенного поста, это моя ошибка: NoMethodError в Прогрессах # 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 журнал кода заканчивается ...

Edit: Кажется, это ошибка в моем маршрутах. Это в настоящее время прокомментировано:

 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 Ответ

3 голосов
/ 17 февраля 2010

Я предложу двухэтапную отладку здесь:

  1. Удалите весь код из представления редактирования и добавьте в него простой текст, затем перейдите на свою страницу в браузере и посмотрите, есть ли у вас какая-либо ошибка, новая ошибка или нет ошибки

  2. Если вы получили какую-либо новую ошибку, это может помочь вам в решении проблемы или в действии редактирования вашего контроллера поднимите @progress, чтобы увидеть, устанавливается ли оно

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

Эти два шага могут помочь вам решить проблему.

...