覆盖Refinerycms中的编辑/新建/创建行为

时间:2013-09-11 11:44:23

标签: ruby-on-rails refinerycms

我需要在Pages控制器(或任何自定义生成的引擎)中更改编辑/创建方法,但找不到任何。我已经覆盖了所有控制器,并尝试在整个项目中搜索任何“def编辑”,但没有找到任何控制器。

我是Rails的新手,我不明白这是如何工作的。当我尝试编辑页面时,debug(params)指向refinery / admin / pages,但是没有编辑方法,也没有管理员或页面控制器。那么当我点击更新按钮或创建新页面时,请求实际上在哪里?

2 个答案:

答案 0 :(得分:0)

好的,我发现了什么是错的。

当你执行“覆盖控制器= *”时,它实际上不会覆盖所有控制器,因此controllers / refinery /中的pages_controller.rb显然只是页面控制器的一半。我需要的真正的控制器是控制器/精炼厂/管理员中的一个,当你执行“覆盖控制器= refinery / admin /*.

时出现

仍在弄清楚创建和编辑操作的位置,但至少我找到了新的和更新操作。

答案 1 :(得分:0)

我是Rails和Refinery世界的新手,但也许我可以提供帮助。

你读过这个:Extending Controllers and Models with Decorators

在我的情况下,我必须在将参数保存到数据库之前修改参数,基本上确保它是大写的。所以我这样做了:

Refinery::Routes::Admin::RoutesController.class_eval do
  before_filter :uppercase_region, :only => [:create, :update]

  protected

  def uppercase_region
    params[:route][:region].upcase!
  end
end

也许使用过滤器就足够了。我想在这里你也可以覆盖创建和更新操作。

你会在生成的引擎中看到你有这样的东西:

crudify :'refinery/routes/route',
        :title_attribute => 'name',
        :xhr_paging => true

如果您遵循该代码,则会转到“crud.rb”文件:crud.rb

在这里,您可以阅读动作的外观。现在,您可以在“装饰器”文件中创建自己的文件,如教程中所述。

希望这对某人有用。