Ruby on Rails NoMethodError в CharactersController#new

Непосредственно после создания эшафота я получаю NoMethodError при попытке создать новые тестовые фиктивные данные.

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

Модель:

class Character < ActiveRecord::Base
  attr_accessible :cha, :class, :class_option, :con, :dex, :exp, :int, :name, :portrait_url, :str, :wis
end

Вид:

<h1>Listing characters</h1>

<table>
  <tr>
    <th>Name</th>
    <th>Exp</th>
    <th>Class</th>
    <th>Class option</th>
    <th>Str</th>
    <th>Dex</th>
    <th>Con</th>
    <th>Int</th>
    <th>Wis</th>
    <th>Cha</th>
    <th>Portrait url</th>
    <th></th>
    <th></th>
    <th></th>
  </tr>

<% @characters.each do |character| %>
  <tr>
    <td><%= character.name %></td>
    <td><%= character.exp %></td>
    <td><%= character.class %></td>
    <td><%= character.class_option %></td>
    <td><%= character.str %></td>
    <td><%= character.dex %></td>
    <td><%= character.con %></td>
    <td><%= character.int %></td>
    <td><%= character.wis %></td>
    <td><%= character.cha %></td>
    <td><%= character.portrait_url %></td>
    <td><%= link_to 'Show', character %></td>
    <td><%= link_to 'Edit', edit_character_path(character) %></td>
    <td><%= link_to 'Destroy', character, method: :delete, data: { confirm: 'Are you sure?' } %></td>
  </tr>
<% end %>
</table>

<br />

Контроллер:

class CharactersController < ApplicationController
  # GET /characters
  # GET /characters.json
  def index
    @characters = Character.all

    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @characters }
    end
  end

  # GET /characters/1
  # GET /characters/1.json
  def show
    @character = Character.find(params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.json { render json: @character }
    end
  end

  # GET /characters/new
  # GET /characters/new.json
  def new
    @character = Character.new

    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @character }
    end
  end

  # GET /characters/1/edit
  def edit
    @character = Character.find(params[:id])
  end

  # POST /characters
  # POST /characters.json
  def create
    @character = Character.new(params[:character])

    respond_to do |format|
      if @character.save
        format.html { redirect_to @character, notice: 'Character was successfully created.' }
        format.json { render json: @character, status: :created, location: @character }
      else
        format.html { render action: "new" }
        format.json { render json: @character.errors, status: :unprocessable_entity }
      end
    end
  end

  # PUT /characters/1
  # PUT /characters/1.json
  def update
    @character = Character.find(params[:id])

    respond_to do |format|
      if @character.update_attributes(params[:character])
        format.html { redirect_to @character, notice: 'Character was successfully updated.' }
        format.json { head :no_content }
      else
        format.html { render action: "edit" }
        format.json { render json: @character.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /characters/1
  # DELETE /characters/1.json
  def destroy
    @character = Character.find(params[:id])
    @character.destroy

    respond_to do |format|
      format.html { redirect_to characters_url }
      format.json { head :no_content }
    end
  end
end

person stygma    schedule 26.10.2012    source источник
comment
Не могли бы вы добавить конкретную ошибку, которую вы тоже получаете?   -  person Kevin K    schedule 26.10.2012


Ответы (1)


Вам удалось использовать некоторые зарезервированные слова в качестве атрибутов. В частности, class не следует использовать в качестве атрибута модели. Вы заметите, что character.class вызывается в вашем представлении, которое должно возвращать 'Character', имя класса этого конкретного символьного объекта.

Вот список зарезервированных ключевых слов: http://oldwiki.rubyonrails.org/rails/pages/ReservedWords< /а>

person agmin    schedule 26.10.2012
comment
Спасибо! Кажется, это все. Я действительно не мог найти способ отменить то, что я сделал, но это было достаточно рано в проекте, чтобы я мог просто начать все сначала и назвать класс чем-то другим. - person stygma; 27.10.2012