1

我为我的 Rails 应用程序安装了friendly_idActiveScaffold 。

因为并非我的所有模型都有唯一的名称字段,所以我必须使用Slugged 模型才能使其工作。friendly_id 完美地完成了这项工作我有友好的 URL,我可以使用友好的 id 加载对象。

但是当我想用 ActiveScaffold 创建一个新对象时,它会显示以下错误消息:

ActiveScaffold::ReverseAssociationRequired (Association slugs:为了支持 :has_one 和 :has_many 父记录是新的并且子记录验证父记录的存在,ActiveScaffold 需要反向关联(belongs_to)。)

当然,我无法belongs_to在该端创建关联,因为它是由friendly_id模块创建的,并且每个以 slugged 方式工作的模型都应该包含在那里。

该模型如下所示:

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 , git 分支3.2.0中最新的 ActiveScaffold 。rails-2.3

更新:似乎它在生产模式下不冲突。

4

2 回答 2

2

打电话

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

... 创建一个 has_many 和一个有一个关联,指向一个 slug AR 模型,该模型没有任何多态属于正确定义的关联。

所以基本上你需要做的是解决这个错误是在你的父模型的控制器中定义反向关联(有friendly_id东西的那个)

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

它有效:-)

PS:我使用 friendly_id 作为 gem 和 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 回答