2011-02-01 15 views
2

この私のPlan.rbは、次のようになります。未定義方法

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 ....私の 'plans'テーブルに' plan'カラムはありますか?うーん....何かがそれで正しく聞こえない。私は実際にそれを持っていませんが、なぜ私は 'plans'テーブルに' plan'カラムが必要でしょうか?それでは、私は ':plan_id'を参照するべきでしょうか? – marcamillion

+0

あなたは 'has_friendly_id'として何を指定しても、同じ名前のデータベース列が必要です。 –

+0

私は 'plans'テーブルと' plan_id'カラムを自分のテーブルに追加しました。しかし、なぜ私が '計画'の表に '計画'の列が必要なのか分かりません。 – marcamillion

0

また、「あなたが

4にバージョン3からfriendly_idをアップグレードした場合、コマンドhas_friendly_id 『friendly_id『に置き換えられました』このエラー(未定義のメソッド` has_friendly_id)』をを得ることができます - ここにアップグレードする方法を参照してください。

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

注:また、あなたのテーブルに新しいslugカラムを追加するための移行を作成する必要があります。