Geo*_*ath 9 ruby-on-rails friendly-id paper-trail-gem
我正在使用宝石Workflow,Paper Trail和Friend ID.
要使用Paper Trail跟踪状态更改,我已重写persist_workflow_state以显式更新工作流列,以便Paper Trail可以捕获更改.
https://github.com/geekq/workflow#integration-with-activerecord
def persist_workflow_state(new_value)
update_attribute self.class.workflow_column, new_value
end
Run Code Online (Sandbox Code Playgroud)
现在,我已经介绍了没有slug列的Friendly ID,并且在达到上述方法时我得到了错误.
undefined method `slug=' for #<ModelName:0x007f81cf342cd8>
Run Code Online (Sandbox Code Playgroud)
有帮助吗?
Ric*_*eck 16
现在,我已经介绍了没有slug列的友好ID
我不知道你在这里究竟是什么意思,但简单地说,这就像是在没有钥匙的情况下开车
FriendlyID
FriendlyID的工作方式是使用slug(或其他标识符)列来创建slugged URL,并根据slugged ID查找:
extend FriendlyId
friendly_id :name, use: [:slugged, :finders]
Run Code Online (Sandbox Code Playgroud)
这允许gem根据id或slug属性进行查找
如果您错过了slug列,这将阻止此操作,从而导致您的错误.解决这个问题的方法是:
attr_accessor如果您想尝试第二个选项,可以试试这个:
#app/models/ModelName.rb
attr_accessor :slug
Run Code Online (Sandbox Code Playgroud)
小智 5
理查德佩克是正确的,你必须添加slug字段.
但很多人都感到困惑,因为FriendlyID生成的friendly_id_slugs表包含sluggable_id和sluggable_type字段.
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
Run Code Online (Sandbox Code Playgroud)
基本上它会为History Module生成friendly_id_slugs表.看看他们关于History__Avoiding_404_s_When_Slugs_Change的文档:http://norman.github.io/friendly_id/file.Guide.html#History__Avoiding_404_s_When_Slugs_Change
| 归档时间: |
|
| 查看次数: |
8294 次 |
| 最近记录: |