【问题标题】:Override edit/new/create behavior in Refinerycms覆盖 Refinerycms 中的编辑/新建/创建行为
【发布时间】:2013-09-11 11:44:22
【问题描述】:

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

我是 Rails 新手,我不明白它是如何工作的。当我尝试编辑页面时,debug(params) 指向炼油厂/管理员/页面,但在管理员或页面控制器中没有编辑方法。那么当我点击更新按钮或创建新页面时,请求的实际去向是什么?

【问题讨论】:

    标签: ruby-on-rails refinerycms


    【解决方案1】:

    好的,我知道出了什么问题。

    当您执行“覆盖控制器 = *”时,它实际上并没有覆盖所有控制器,因此控制器/炼油厂/中的 pages_controller.rb 显然只是页面控制器的一半。我需要的真正控制器是 controllers/refinery/admin 中的那个,当你执行“override controller=refinery/admin/*.

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

    【讨论】:

      【解决方案2】:

      我是 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

      您可以在此处阅读操作的外观。因此,现在您可以按照教程中的说明在“装饰器”文件中创建自己的文件。

      希望这对某人有用。

      【讨论】:

        猜你喜欢
        • 2023-03-25
        • 2014-10-03
        • 1970-01-01
        • 1970-01-01
        • 2014-10-25
        • 1970-01-01
        • 2023-03-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多