【问题标题】:Friendly_id | Active Record not found友好ID |找不到活动记录
【发布时间】:2013-09-06 15:24:23
【问题描述】:

我关注 Railscast 剧集Pretty URLs with FriendlyId

我在 Rails4 上并使用 Friendly Id 的 Github Repo 上的 5.0 stable 分支。

我按照教程进行操作:

我的模特Clip.rb

extend FriendlyId
friendly_id :title, use: :slugged

我的迁移

rails g migration AddSlugToClips slug:string

编辑迁移:

class AddSlugToClips < ActiveRecord::Migration
  def change
    add_column :clips, :slug, :string
    add_index :clips, :slug
  end
end

对于一个空的数据库,我尝试添加一个剪辑,当我尝试打开它时:

我错过了什么?

如果我通过直接访问 Vine

http://localhost:3000/clips/1

我进入表演页面..

【问题讨论】:

  • 能否确认剪辑已添加?
  • 是的,我在索引和数据库中都看到了。

标签: ruby-on-rails ruby-on-rails-4 friendly-id


【解决方案1】:

好的,我找到了,它与您使用的 Version of Friendly Id 有关。

默认情况下不再覆盖查找器。如果你想做友好的发现,你必须做Model.friendly.find而不是Model.find.

【讨论】:

    【解决方案2】:

    这是因为当您编辑剪辑并更改其标题时,其 slug 将被更新。 因此,请尝试通过以下更改运行代码。

    class Clip < ActiveRecord::Base
      extend FriendlyId
      friendly_id :title, use: :slugged
    
      def should_generate_new_friendly_id?
        new_record?
      end
    end
    
    
    friendly_id :title, use: :slugged # you must do MyClass.friendly.find(params[:id])
    #or
    friendly_id :title, use: [:slugged, :finders] # you can now do MyClass.find(params[:id])
    

    【讨论】:

    • 只有当我编辑剪辑的标题时。但在我的实例上,我上传了一个新剪辑并收到错误。
    • 你试过这个friendly_id :title, use: :slugged #你必须做MyClass.friendly.find('bar')
    • 嘿阿米特。我终于发现出了什么问题。看看我的答案:)
    • 很好,请尝试在我编辑的答案中使用 find 方法。
    • 从 5.0 版开始,FriendlyId 使用语义版本控制。最重要的更改之一是默认情况下不再覆盖 Finder。如果要进行友好查找,则必须使用 Model.friendly.find 而不是 Model.find。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-28
    • 2016-05-15
    • 2011-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多