Tôi đang sử dụng friendly_id
5.0.0.rc1 và cũng active_admin
.friendly_id slug không thay đổi khi cập nhật
Nó sẽ xuất hiện tất cả mọi thứ đang làm việc một cách hoàn hảo như mong đợi, ngoại trừ một thực tế rằng việc cập nhật slug
thuộc tính/cột của một kỷ lục trong active_admin không làm gì cả (nó giữ nó giống nhau)
tôi thấy hành vi tương tự chỉ sử dụng console:
p = Post.first
p.slug
#=> 'test'
p.slug = 'another-test'
p.save
#=> true
p.slug
#=> 'test
cấu hình của tôi:
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
mô hình của tôi:
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
điều khiển của tôi:
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
Cảm ơn!
Có lẽ tôi đang nghĩ một cách sai lầm, nhưng cấu hình của bạn nói rằng nó sẽ tạo ra một sên mới khi cột sên thay đổi. Vì vậy, nếu bạn thay đổi giá trị của cột slug theo cách thủ công và bạn lưu bản ghi, tôi giả định rằng quá trình tạo sẽ được kích hoạt dẫn đến slug cũ vì tiêu đề không thay đổi !? – Vapire
Để trả lời câu hỏi của bạn: nó không kích hoạt. Và theo mặc định, họ giải thích ngược lại. Vì vậy, bạn cần phải có def của bạn should_generate_new_friendly_id? trong mọi mô hình. – Ben