2011-02-01 77 views
2

这是我Plan.rb是什么样子:为friendly_id执行未定义的方法

class Plan < ActiveRecord::Base 

    has_many :users 
    has_friendly_id :plan, :use_slug => true 

end 

User.rb

class User < ActiveRecord::Base 

#There is other stuff in here, but I stripped it out for brevity purposes. 

    has_and_belongs_to_many :projects 
    has_many :stages 
    has_many :uploads 
    has_many :comments 
    has_many :assignments 
    has_many :roles, :through => :assignments 
    belongs_to :plan 


end 

这是错误消息我得到:

'ruby-1.9.2-p0 > Plan.create(:name => "First_Test", :storage => "100") 
NoMethodError: undefined method `plan' for #<Plan:0x00000102b8a2d8> 
    /gemms/ruby-1.9.2-p0/gems/activemodel-3.0.3/lib/active_model/attribute_methods.rb:364:in `method_missing' 
    /gemms/ruby-1.9.2-p0/gems/activerecord-3.0.3/lib/active_record/attribute_methods.rb:46:in `method_missing' 
    /gems/ruby-1.9.2-p0/gems/friendly_id-3.2.0/lib/friendly_id/slugged.rb:82:in `slug_text' 
    /gems/ruby-1.9.2-p0/gems/friendly_id-3.2.0/lib/friendly_id/active_record_adapter/slugged_model.rb:49:in `build_a_slug' 
    /gems/ruby-1.9.2-p0/gems/activesupport-3.0.3/lib/active_support/callbacks.rb:419:in `_run_save_callbacks' 
    /gems/ruby-1.9.2-p0/gems/activerecord-3.0.3/lib/active_record/callbacks.rb:277:in `create_or_update' 
    /gems/ruby-1.9.2-p0/gems/activerecord-3.0.3/lib/active_record/persistence.rb:39:in `save' 
    /gems/ruby-1.9.2-p0/gems/activerecord-3.0.3/lib/active_record/validations.rb:43:in `save' 
    /gems/ruby-1.9.2-p0/gems/activerecord-3.0.3/lib/active_record/attribute_methods/dirty.rb:21:in `save' 
    /gems/ruby-1.9.2-p0/gems/activerecord-3.0.3/lib/active_record/transactions.rb:237:in `block (2 levels) in save' 
    /gems/ruby-1.9.2-p0/gems/activerecord-3.0.3/lib/active_record/transactions.rb:289:in `block in with_transaction_returning_status' 
    /gems/ruby-1.9.2-p0/gems/activerecord-3.0.3/lib/active_record/connection_adapters/abstract/database_statements.rb:139:in `transaction' 
    /gems/ruby-1.9.2-p0/gems/activerecord-3.0.3/lib/active_record/transactions.rb:204:in `transaction' 
    /gems/ruby-1.9.2-p0/gems/activerecord-3.0.3/lib/active_record/transactions.rb:287:in `with_transaction_returning_status' 
    /gems/ruby-1.9.2-p0/gems/activerecord-3.0.3/lib/active_record/transactions.rb:237:in `block in save' 
    /gems/ruby-1.9.2-p0/gems/activerecord-3.0.3/lib/active_record/transactions.rb:248:in `rollback_active_record_state!' 
    /gems/ruby-1.9.2-p0/gems/activerecord-3.0.3/lib/active_record/transactions.rb:236:in `save' 
    /gems/ruby-1.9.2-p0/gems/activerecord-3.0.3/lib/active_record/base.rb:498:in `create' 
    from (irb):3 
    /gems/ruby-1.9.2-p0/gems/railties-3.0.3/lib/rails/commands/console.rb:44:in `start' 
    /gems/ruby-1.9.2-p0/gems/railties-3.0.3/lib/rails/commands/console.rb:8:in `start' 
    /gems/ruby-1.9.2-p0/gems/railties-3.0.3/lib/rails/commands.rb:23:in `<top (required)>' 
    from script/rails:6:in `require' 
    from script/rails:6:in `<main>' 

不知道我在这里做错了什么,但我不能创建任何新的'计划'。

回答

4

看起来您的数据库在您的plans表中没有​​列。除了将has_friendly_id声明添加到模型之外,您是否创建并运行迁移以将​​字段添加到数据库?

+0

hrmm ....一个'plan`列到我的'plans`表中? Hrmm ....有些东西听起来不正确。我其实没有,但为什么我需要在我的“计划”表中的“计划”列?那么我想我应该引用`:plan_id`? – marcamillion 2011-02-01 06:18:54

0

你也可以得到这个错误(未定义的方法`has_friendly_id'),如果您已经从第3版升级friendly_id至4

命令‘has_friendly_id’已取代‘friendly_id’ - 看到这里怎么升级:

http://rubydoc.info/github/norman/friendly_id/master/file/WhatsNew.md

注意:您还需要创建一个迁移到一个新的蛞蝓列添加到您的表。