2011-01-20 73 views
1

我爲我的Rails應用程序安裝了friendly_idActiveScaffoldfriendly_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 

有沒有一種方法,使這項工作?

版本:friendly_id 3.2.0,ActiveScaffold最新的rails-2.3 git分支。

UPDATE:似乎它在生產模式中不衝突。

+0

也許不相關,但是,您使用的是globalize2嗎? – andrea 2011-01-20 18:11:08

+0

不,我沒有使用globalize2 – 2011-01-20 18:11:59

回答

2

調用

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

...創建的has_many和具有指向它有沒有任何多屬於正確定義的關聯蛞蝓AR模型中的一個關聯。

所以基本上你需要做什麼來解決這個錯誤發生在你的父模型(誰friendly_id的東西之一)

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

的控制器來定義反向協會和它的作品:-)

PS:我使用friendly_id作爲寶石和ActiveScaffold VHO主分支的導軌3

0

在過去我有同樣的問題,我已經解決了,但我不記得我的解決方案,看看我的代碼唯一相關的黑客是使用friendly_id作爲插件,並在environemnt最後加載config.plugin。 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 

我不確定,對不起,但如果你嘗試讓我知道。

對不起我的英語

+0

我會嘗試,但是因爲`environment.rb`表示默認順序是按字母順序排列的,所以`activescaffold`將以任何方式在`friendly_id`之前。 :( – 2011-01-20 18:13:13