小编Kri*_* PD的帖子

Rails 3 vs 2.3.5使用:partial和:layout来渲染奇数

我遇到了一个奇怪的问题,我无法解释Rails 3和渲染部分布局(来自控制器).我希望有人可以提供一些有关正在发生的事情的见解.

首先,我们将此控制器称为"传统"控制器.它已经存在了很长时间,并且做了很多错事,但我现在不打算重构它,所以我试图找到合作方式来处理我们拥有的东西.

这个new动作是这样的(在BarsController)

def new
  if something
    render :partial => "foo", :layout => "bars"
  elsif something_else
    render :partial => "foo2", :layout => "bars"
  elsif something_else_else
    render :partial => "foo3", :layout => "bars"
  else
    render :partial => "foo4", :layout => "bars"
end
Run Code Online (Sandbox Code Playgroud)

现在,在Rails 2.3.5中,这很好用.它会在适当的布局中呈现适当的部分 - 我意识到布局选项在这里是多余的,因为无论如何都会默认为条形布局.当我们升级到Rails 3.0.x时,我们开始收到如下错误:

Missing partial layouts/bars with {:handlers=>[:erb, :rjs, :builder, :rhtml, :rxml], :formats=>[:html]
Run Code Online (Sandbox Code Playgroud)

很明显,layouts/bars.html.erb文件一直存在,所以我无法理解.我能够渲染:layout => false,但那当然不会起作用.最终我发现,如果我执行以下任一操作,它会起作用:

1)重命名我的布局_bars.html.erb而不是bars.html.erb和:

render :partial => 'foo2', :layout => 'bars' …

ruby-on-rails ruby-on-rails-3

9
推荐指数
1
解决办法
3492
查看次数

Railtie Initializer未在插件中运行

我最近从gem版本切换resources_controller到了依赖plugingem版本git.

vendor/plugins/plugin/lib/plugin.rb文件内部,Railtie如下:

module Ardes
  module ResourcesController
    class Railtie < Rails::Railtie
      initializer 'ardes.resources_controller' do
        ActiveSupport.on_load(:action_controller) do
          extend Ardes::ResourcesController
          include Ardes::ResourcesController::RequestPathIntrospection
        end

        ActiveSupport.on_load(:active_record) do
          include Ardes::ActiveRecord::Saved
        end
      end
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

我已经require 'resources_controller'在我的一个初始化程序中添加了一个并正确加载此文件.问题是虽然Railtie被评估(puts类块中的一个将被击中),但它似乎永远不会实际调用初始化块本身.这当然很重要,因为这是扩展ActionController到包括resources_controller_for方法的地方.

这个问题似乎已经出现在这里这里.虽然在这两种情况下他们都找到了解决问题的其他方法,但没有直接回答为什么没有调用块.

从我在Rails文档中可以看出,您可以将初始化程序块命名为您想要的任何内容,并且它应该运行.我认为这不重要,但我在生产中运行时首先注意到了这个问题,rails s -e production但我相信在开发模式中存在同样的问题.

可能会发生什么?

作为参考,完整的插件在这里:https://github.com/ianwhite/resources_controller

ruby-on-rails ruby-on-rails-plugins ruby-on-rails-3 railtie

4
推荐指数
1
解决办法
1059
查看次数