我为我的Rails应用程序安装了friendly_id和ActiveScaffold。
因为并非我的所有模型都有唯一的名称字段,所以我必须使用Slugged Model才能使其正常工作。 friendly_id完美地完成了我的工作,我有友好的URL,我可以使用友好的id加载对象。
但是当我想用ActiveScaffold创建一个新对象时,它会显示以下错误消息:
ActiveScaffold :: ReverseAssociationRequired (协会slu ::为了 支持: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
,最新的rails-2.3
git分支中的ActiveScaffold。
更新:似乎在生产模式下不会发生冲突。
答案 0 :(得分: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和ActiveScaffold VHO master branch for rails 3
答案 1 :(得分: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
我不确定,抱歉,但如果你试着让我知道。
对不起我的英语