加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – friendly_id slug在更新时没有变化

发布时间:2020-12-16 19:30:06 所属栏目:百科 来源:网络整理
导读:我正在使用friendly_id 5.0.0.rc1,还有active_admin. 看起来一切都按预期完美地工作,除了在active_admin中更新记录的slug属性/列没有做任何事情(它保持相同) 我发现只使用控制台的行为相同: p = Post.firstp.slug#= 'test'p.slug = 'another-test'p.save#=
我正在使用friendly_id 5.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

谢谢!

解决方法

通常在使用友好ID时,您永远不会手动更新slug.代替:
def should_generate_new_friendly_id?
  slug.blank? || title_changed?
end

然后每次更改标题时,它都会自动更新slug.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读