2014-01-27 8 views
5

Ich benutze die Edelsteine ​​Workflow, Paper Trail und Friend ID.Friendly ID - undefined Methode `slug = 'für

Um die Statusänderungen mithilfe von Paper Trail nachzuverfolgen, habe ich persist_workflow_state überschrieben, um die Workflowspalte explizit zu aktualisieren, sodass Paper Trail die Änderung erfassen kann.

https://github.com/geekq/workflow#integration-with-activerecord

def persist_workflow_state(new_value) 
    update_attribute self.class.workflow_column, new_value 
end 

Nun, ich habe ohne Slug Spalte Freundlich ID eingeführt, und ich den Fehler, auf das obige Verfahren zu erreichen.

undefined method `slug=' for #<ModelName:0x007f81cf342cd8> 

Irgendwelche Hilfe?

Antwort

12

Nun, ich habe ohne Slug Spalte Freundlich ID eingeführt

ich nicht genau wissen, was Sie hier bedeuten, sondern einfach, es ist wie ohne die Schlüssel


ein Auto zu starten versucht,

FriendlyID

Die Art und Weise FriendlyID Werke einezu verwenden ist(oder eine andere Kennung) Spalte beide erstellen die Slugged URL, und finden Sie die Slugged ID basiert weg:

extend FriendlyId 
friendly_id :name, use: [:slugged, :finders] 

Das den Edelstein ermöglicht off finden basiert entweder die id oder das slug Attribut

Wenn Sie verpassen Sie die slug Spalte, dies wird verhindern, dass dies funktioniert, was zu Ihrem Fehler führt. Die Art und Weise, dies zu beheben sind:

  1. Verwenden Sie die Slug Spalte
  2. eine Schnecke Attribut erstellen attr_accessor

mit der Wenn Sie die zweite Option, um versuchen möchten, können Sie dies versuchen:

#app/models/ModelName.rb 
attr_accessor :slug 
+0

es funktionierte, aber wenn wir Slug Spalte in db haben, dann, warum ich attr_accessor – ImranNaqvi

+0

Die Frage brauchen, um nicht eine Schnecke Säule mit –

3

Richard Peck ist richtig, dass Sie slug Feld hinzufügen müssen.

Aber viele Leute waren verwirrt, weil FriendlyID friendly_id_slugs Tabelle generiert, die das Feld träge_id und träge_Typ enthält.

create_table "friendly_id_slugs", force: :cascade do |t| 
t.string "slug",      null: false 
t.integer "sluggable_id",    null: false 
t.string "sluggable_type", limit: 50 
t.string "scope" 
t.datetime "created_at" 
t.index ["slug", "sluggable_type", "scope"], name: "index_friendly_id_slugs_on_slug_and_sluggable_type_and_scope", unique: true 
t.index ["slug", "sluggable_type"], name: "index_friendly_id_slugs_on_slug_and_sluggable_type" 
t.index ["sluggable_id"], name: "index_friendly_id_slugs_on_sluggable_id" 
t.index ["sluggable_type"], name: "index_friendly_id_slugs_on_sluggable_type" 
end 

Im Grunde erzeugt es Friendly_id_slugs Tabelle für History Module. Werfen Sie einen Blick auf ihre Dokumentation über History__Avoiding_404_s_When_Slugs_Change: http://norman.github.io/friendly_id/file.Guide.html#History__Avoiding_404_s_When_Slugs_Change

Verwandte Themen