10

私はfriendly_id5.0.0.rc1を使用していactive_adminます。

active_admin でレコードの属性/列を更新しても何も行われないという事実を除いて、すべてが期待どおりに完全に機能しているように見えますslug(それは同じままです)。

コンソールを使用するだけで同じ動作を見つけます:

p = Post.first
p.slug
#=> 'test'
p.slug = 'another-test'
p.save
#=> true
p.slug
#=> 'test

私の設定:

FriendlyId.defaults do |config|
  config.use :reserved

  config.reserved_words = %w(admin new edit index session users register)

  config.use :finders

  config.use :slugged

  config.slug_column = 'slug'

  config.sequence_separator = '-'

  config.use Module.new {
    def should_generate_new_friendly_id?
      slug.blank? || slug_changed?
    end
  }
end

私のモデル:

class Post < ActiveRecord::Base

  default_scope { order('created_at DESC') }

  validates :title, presence: true
  validates :body,  presence: true
  validates :views, presence: true, numericality: { only_integer: true }

  extend FriendlyId
  friendly_id :title, use: [:slugged, :history]

end

私のコントローラー:

class PostsController < ApplicationController

  def index
    @posts = Post.all.page(params[:page]).per(10)
  end

  def show
    @post = Post.find_by_slug!(params[:id])

    if request.path != post_path(@post)
      redirect_to @post, :status => :moved_permanently and return
    else
      @post.increment :views if @post
    end

  end

end

ありがとう!

4

3 に答える 3

25

通常、フレンドリ ID を使用する場合、スラッグを手動で更新することはありません。その代わり:

def should_generate_new_friendly_id?
  slug.blank? || title_changed?
end

そして、タイトルを変更するたびに、スラッグが自動的に更新されます。

于 2013-09-29T01:22:13.027 に答える
3

より正確には、使用する必要がありますself.title_changed?

def should_generate_new_friendly_id?
  slug.blank? || self.title_changed?
end
于 2016-01-29T18:27:44.203 に答える