Undefinierte Methode zur Implementierung von Friendly_ID
-
27-10-2019 - |
Frage
So sieht mein Plan.rb aus:
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
Dies ist die Fehlermeldung, die ich bekomme:
'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>'
Ich bin mir nicht sicher, was ich hier falsch mache, aber ich kann keine neuen "Pläne" erstellen.
Lösung
Es sieht so aus, als hätte Ihre Datenbank keine plan
Spalte in Ihrem plans
Tisch. Zusätzlich zum Hinzufügen der has_friendly_id
Anweisung zu Ihrem Modell haben Sie eine Migration erstellt und ausgeführt, um das hinzuzufügen? plan
Feld zu Ihrer Datenbank?
Andere Tipps
Sie können diesen Fehler auch (undefinierte Methode `Has_Friendly_id ') erhalten, wenn Sie freundlich_ID von Version 3 auf 4 aktualisiert haben.
Der Befehl 'has_friendly_id' wurde durch 'Friendly_id' ersetzt - siehe, wie man hier aktualisiert:
http://rubydoc.info/github/norman/friendly_id/master/file/whatsnew.md
Hinweis: Sie müssen auch eine Migration erstellen, um Ihrer Tabelle eine neue Slug -Spalte hinzuzufügen.