Friendly_idとActivesCaffoldの競合
-
13-10-2019 - |
質問
私は持っています Friendly_id と ActivesCaffold 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
確かではありませんが、ごめんなさいですが、お知らせください。
私の英語でごめんなさい