2017-09-29 6 views
1

ブログRails webappを作成しています。フレンドリーIDの宝石を使用することにしました。私は編集ビューでスラッグをカスタマイズする機能を追加したいと思います)。しかし、スラグはそれ自身で修正することはできないようです。現在のタイトルの実行時にスラグにのみ更新されると、私は独立して更新し、タイトルFriendlyIDを使ってRailsでタイトルとは別にスラッグを編集

Blog.rb

class Blog < ApplicationRecord 
    enum status: { draft: 0, published: 1 } 

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

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

blog_controller.rb

に必ずしも結びついていないことができスラグを持っていると思います
def set_blog 
    @blog = Blog.friendly.find(params[:id]) 
end 

答えて

0

のは、あなたが編集できるようにあなたのBlogを思っているとしましょうfriendly_id wiki page

で、この記事を見てみましょう独立して(スラグが由来し)タイトルからスラグと、それは別のフィールドにデフォルト設定されていません。

class Blog < ActiveRecord::Base 
    attr_accessor :temporary_slug 
    extend FriendlyId 
    friendly_id :slug, :use => [:slugged] 

    def should_generate_new_friendly_id? 
    temporary_slug_changed? 
    end 

# track changes in non persisted attribute 

    def temporary_slug=(value) 
    attribute_will_change!('temporary_slug') if temporary_slug != value 
    @temporary_slug = value 
    end 

    def temporary_slug_changed? 
    changed.include?('temporary_slug') 
    end 

end 

そして例の出力は次のようになります。もしあれば、そうでない場合

blog = Blog.create(title: "How Long is a Long Long Time") 
blog.slug 
# nil 
post = Blog.update_attributes(title: "Some other title", temporary_slug: "My favorite blog") 
blog.slug 
# 'my-favorite-blog' 

スラッグの代わりに、これを行うタイトルのバージョンをデフォルトに設定してください:

+0

こんにちは!助けてくれてありがとう!しかし、私はtemporary_slugと私の更新ブログエントリのための次のような出力を得るの指示に従った後:「私のお気に入りのブログ」更新: スラグ:「c4f2455c-08a1-47f9-bca8-722543b52971」 スラグが変換されるようですいくつかのタイプのIDに。どんなアイデアがここで起こっている? – Maikol88

関連する問題