2016-10-18 5 views
0

ActiveAdmin、Globalize、FriendlyIdを使用してRailsアプリケーションを構築しています。私はActiveAdminで記事のタイトルを更新するときFriendlyIdがタイトルのスラッグを更新しない

class Post < ActiveRecord::Base 
    translates :title, :slug, :content 
    active_admin_translates :title, :slug, :content do 
    validates :title, presence: true 
    end 

    extend FriendlyId 
    friendly_id :slug_candidates, 
       use: [:slugged, :history, :globalize, :finders] 

    private 

    def slug_candidates 
    [[:title, :deduced_id]] 
    end 

    # Used to add prefix number if slug already exists 
    def deduced_id 
    count = Post.where(title: title).count 
    return count + 1 unless count == 0 
    end 
end 

しかし、スラグはfriendly_idによって更新されることはありませんので、私は、このメソッドを追加しました:私のモデルでは

私はグローバル化とFriendlyIdパラメータ(抜粋)をアップ定住しました:

def should_generate_new_friendly_id? 
    title_changed? || super 
end 

これを行うと、title_changed?私が知らない理由で新しいタイトルがモデルに送られないので、常にfalseですが、翻訳されていない他のパラメータについては、正しく取得されます。

例:

logger.debug(title) # => Give me new updated title value BUT 
title_changed? # => Always nil 
online_changed? # => Works 

それはモデルが翻訳された属性の更新について知っていない可能性がありどのように?
私は何を欠席しましたか?

ありがとうございました!

マイプロジェクト

  • Railsの4.2.7.1 /ルビー2.3.0
  • ActiveAdmin 1.0.0pre4
  • 5.0.1
  • は5.1.0
  • FriendlyIdグローバル化をFriendlyIdグローバル化1.0.0.alpha2

編集:(私のフォームの抽出物)

f.translated_inputs 'Translated fields', switch_locale: true do |t| 
    t.input :title 
    t.input :content 
end 

答えて

0

しかし、あなたがフォームでslugフィールドを持ち、それを感じていない場合は、空の文字列が含まれていますどのような、ActiveAdminでモデルを保存していると、スラグは生成されない。 修正方法?このようなモデルでスラグセッターメソッドをオーバーライドします:

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



    def slug=(value) 
    if value.present? 
     write_attribute(:slug, value) 
    end 
    end 

この

+0

感謝を試してみたが、私は私の形で任意の「スラッグ」入力フィールドを持っていない(私は私の質問は、フォームのエキスを加える編集しました)。 新しい投稿を作成すると、すべての言語に対してスラッグが正しく設定されます。 – anthony

関連する問題