1

Rails アプリケーション用に Friendly_id と ActiveScaffold をインストールしまし

すべてのモデルに一意の名前フィールドがあるわけではないため、それを機能させるにはSlugged Modelを使用する必要があります。Friendly_id は問題なく機能します。フレンドリな URL があり、フレンドリ ID を使用してオブジェクトをロードできます。

しかし、ActiveScaffold で新しいオブジェクトを作成しようとすると、次のエラー メッセージが表示されます。

ActiveScaffold::ReverseAssociationRequired (関連付けスラッグ: 親レコードが新しく、子レコードが親の存在を検証する :has_one および :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

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

バージョン: 3.2.0Friendly_id 、rails-2.3Git ブランチの最新の ActiveScaffold。

更新: プロダクション モードでは競合しないようです。

4

2 に答える 2

2

呼び出し

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

... has_many を作成し、適切に定義された関連付けに属するポリモーフィックがないスラッグ AR モデルを指す has1 関連付けを作成します。

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

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

そしてそれは動作します:-)

PS: 私は、Gem として Friendly_id を使用し、Rails 3 には ActiveScaffold VHO マスター ブランチを使用します。

于 2011-04-15T17:08:41.297 に答える
0

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

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

よくわかりませんが、もしよろしければ教えてください。

私の英語でごめんなさい

于 2011-01-20T17:52:54.037 に答える