2013-02-19 88 views
0

的Rails 3。这里是我的代码:发生未定义的方法

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控制台中测试它工作正常。

谢谢。

回答

2

您的代码应该是updown方法的一部分 - 不在迁移类中。

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.