0

Rails3.これが私のコードです:

class AddForAutocompleteInShops < ActiveRecord::Migration
  def up
    add_column :shops, :for_autocomplete, :string
  end

  Shop.reset_column_information

  shops = Shop.all

  shops.each do |shop|
    shop.for_autocomplete = %(#{shop.name} #{shop.formatted_address})
    shop.save
  end

  def down
    remove_column :shops, :for_autocomplete
  end
end

エラーメッセージが発生しました:

rake aborted!
An error has occurred, all later migrations canceled:

undefined method `for_autocomplete=' for #<Shop:0x007fba66be7af8>
/Users/abc/Sites/test/db/migrate/20130219121256_add_for_autocomplete_in_shops.rb:11:in `block in <class:AddForAutocompleteInShops>'
/Users/abc/Sites/test/db/migrate/20130219121256_add_for_autocomplete_in_shops.rb:10:in `each'
/Users/abc/Sites/test/db/migrate/20130219121256_add_for_autocomplete_in_shops.rb:10:in `<class:AddForAutocompleteInShops>'
/Users/abc/Sites/test/db/migrate/20130219121256_add_for_autocomplete_in_shops.rb:1:in `<top (required)>'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)

私のコードの何が問題になっていますか?Railsコンソールでテストしましたが、正常に動作します。

ありがとう。

4

2 に答える 2

2

コードは、移行クラスの途中ではなく、upまたはメソッドの一部である必要があります。down

于 2013-02-19T12:38:09.470 に答える
1
    class AddForAutocompleteInShops < ActiveRecord::Migration
      def up

        add_column :shops, :for_autocomplete, :string

        Shop.reset_column_information

        shops = Shop.all

        shops.each do |shop|
          shop.for_autocomplete = %(#{shop.name} #{shop.formatted_address})
          shop.save
        end
      end



      def down
        remove_column :shops, :for_autocomplete
      end
    end

Try this.
于 2013-02-19T12:45:26.177 に答える