Вопрос

Я создал базовый каркас для модели Foo с одним свойством - bar:String

foos/новый.html.erb:

<h1>New foo</h1>

<% form_for(@foo) do |f| %>
  <%= f.error_messages %>

  <p>
    <%= f.label :bar %><br />
    <%= f.text_field :bar %>
  </p>
  <p>
    <%= f.submit 'Create' %>
  </p>
<% end %>

<%= link_to 'Back', foos_path %>

Но я получаю NoMethodError для моего свойства 'bar':

 NoMethodError in Foos#new

Showing app/views/foos/new.html.erb where line #8 raised:

undefined method `bar' for #<Foo id: nil, created_at: nil, updated_at: nil>

Extracted source (around line #8):

5: 
6:   <p>
7:     <%= f.label :bar %><br />
8:     <%= f.text_field :bar %>
9:   </p>
10:   <p>
11:     <%= f.submit 'Create' %>

Как вы можете видеть, bar - единственное свойство в моей модели Foo:

class CreateFoos < ActiveRecord::Migration
  def self.up
    create_table :foos do |t|
      t.String :bar

      t.timestamps
    end
  end

  def self.down
    drop_table :foos
  end
end

И новый метод в foos_controller взят из каркаса по умолчанию:

  def new
    @foo = Foo.new

    respond_to do |format|
      format.html # new.html.erb
      format.xml  { render :xml => @foo }
    end
  end

Любые идеи будут оценены по достоинству

Это было полезно?

Решение

Казалось бы, вы написали это слово с заглавной буквы String в процессе миграции вашей базы данных.Попробуйте сделать это со строчными буквами s и принудительно запустите миграцию еще раз (rake db:migrate:redo, предполагая, что это была ваша последняя миграция, в противном случае используйте

 rake db:migrate:down VERSION=29843923 && rake db:migrate:up VERSION=29843923

где 29843923 - это ваша временная метка миграции.).

Другие советы

Выполнили ли вы свою миграцию?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top