FriendlyID 历史记录不适用于 Rails 中更新的模型 url

Posted

技术标签:

【中文标题】FriendlyID 历史记录不适用于 Rails 中更新的模型 url【英文标题】:FriendlyID history not working for updated model urls in Rails 【发布时间】:2014-12-28 10:29:19 【问题描述】:

遵循 FriendlyID 的 wiki 和 railscast 如果我的用户模型的名称已更改,我尝试重写和重定向我的网址。不幸的是什么也没发生。我已经进行了正确的迁移:

rails generate friendly_id
rails generate migration add_slug_to_artists slug:string:uniq
rake db:migrate

并按照指示应用此代码,但无济于事。最初创建模型实例后,url 保持不变。

艺人模特

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

用户控制器

class ArtistssController < ApplicationController
  before_action :set_artist, only: [:show, :edit, :update, :destroy]

  def show
    if request.path != user_path(@artist)
      redirect_to @artist, :status => :moved_permanently
    end
  end

  def update
    if @artist.update_attributes(artist_params)
      flash[:notice] = 'Artist successfully updated'
      redirect_to @artist
    else
      render 'edit'
  end

  private
  # Use callbacks to share common setup or constraints between actions.
    def set_artist
      @artist = Artist.friendly.find(params[:id])
    end

    # Never trust parameters from the scary internet, only allow the white list through.
    def artist_params
      params.require(:artist).permit(:name)
    end
end

【问题讨论】:

您没有发布 update 方法的代码,所以我不确定这是否是问题所在,但您需要将 slug 设置为 nil 以便它重新生成。 @ViniciusPinto 我已经更新了我的问题以显示更新操作中的内容(从脚手架生成的默认代码)。你会建议我做什么? 在调用update_attributes()之前添加@artist.slug = nil @ViniciusPinto 我的回答是否准确地符合您的描述? 【参考方案1】:

虽然它在他们的docs 中声明,但从未真正解释过在控制器中为 FriendlyID 5 更改 url 的代码。我最终不得不添加@artist.slug = nil 才能生效:

def update
  @artist.slug = nil
  if @artist.update_attributes(artist_params)
    flash[:notice] = 'Artist successfully updated'
    redirect_to @artist
  else
    render 'edit'
  end
end

【讨论】:

@artist.slug = nil 应该在调用update_attributes之前 奇怪的是,当 @artist.slug = nil 处于条件状态时,它仍然能够重写 url。不确定代码的正确位置,这就是为什么我想澄清并确保正确完成代码的原因。无论如何感谢您的帮助。

以上是关于FriendlyID 历史记录不适用于 Rails 中更新的模型 url的主要内容,如果未能解决你的问题,请参考以下文章

Rails 低级缓存不适用于活动记录

使用 FriendlyID 在 Rails 中独立于标题编辑 slug

使用 Rails 5,如何让 FriendlyId 附加 -"count+1" 来复制 slug 而不是 UUID?

不适用于经过审核的 4.7 gem 更新模型

jQuery masonry 不适用于 Rails

jquery 比率插件不适用于 Rails