質問

私は持っています Friendly_idActivesCaffold Railsアプリケーション用にインストールされています。

私のモデルのすべてが一意の名前フィールドを持っているわけではないので、私は スラッグモデル それを機能させるために。 Friendly_idジョブを完璧に行います。フレンドリーなURLがあり、フレンドリーIDを使用してオブジェクトをロードできます。

しかし、ActivesCoffoldで新しいオブジェクトを作成したい場合、次のエラーメッセージが表示されます。

ActivesCoffold :: ReversEasSociationRequired(Association Slugs:support:has_one and:has_many親レコードが新しく、子レコードが親の存在を検証すると、ActiveScaffoldは逆の関連性(belongs_to)を必要とします。)

もちろん、私は作成することはできません belongs_to それはによって作成されているので、その側の関連付け friendly_id モジュールとスラッグされた方法で動作するすべてのモデルをそこに含める必要があります。

モデルは次のようになります:

class FooBar < ActiveRecord::Base
  has_friendly_id :name, :use_slug => true, :approximate_ascii => true
end

私の中で ApplicationController:

class Admin::FooBarsController < Admin::ApplicationController
  active_scaffold :foo_bar do |config|
    config.list.columns = [ :id, :name ])
    config.update.columns = [ :name ]
    config.create.columns = config.update.columns
  end
end

これを機能させる方法はありますか?

バージョン:Friendly_id 3.2.0, 、ActivesCaffold最新の rails-2.3 gitブランチ。

アップデート: :生産モードでは矛盾しないようです。

役に立ちましたか?

解決

電話

has_friendly_id :name, :cache_column => 'cached_slug', :use_slug => true

... has_manyを作成し、Aには、適切に定義された関連付けに属している多型に属していないスラグARモデルを指す1つの関連付けがあります。

したがって、基本的にこのエラーを解決するために必要なことは、親モデルのコントローラー(Friendly_idのものを持っているもの)の逆の関連性を定義することです。

  active_scaffold :products do |config|
    ...
    config.columns[:slug].association.reverse = :product
    config.columns[:slugs].association.reverse = :product
  end

そしてそれは機能します:-)

PS:私はdenfrience_idをgemとして使用し、rails 3のActiveScaffoldVHOマスターブランチを使用しています

他のヒント

過去に私は同じ問題を抱えていますが、解決しましたが、私の解決策を覚えていません。私のコードを見てください。唯一の関連するハックは、friendly_idをプラグインとして使用し、config.plugin in environemnt.rbで最後にロードすることです。

aviable_plugins = Dir.glob(RAILS_ROOT+"/vendor/plugins/*").collect {|i| i.split("/").last }
config.plugins  = aviable_plugins + [:friendly_id] #friendly_id must be last

確かではありませんが、ごめんなさいですが、お知らせください。

私の英語でごめんなさい

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top