2011-01-20 85 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