Rails渲染部分和布局在控制器中

Ric*_*wis 9 ruby layout partials devise ruby-on-rails-4

我正在重写设计注册控制器的创建操作.我有两种注册形式,个人或公司,公司有一个名为company_form的字段设置为true,以区分这两种形式.

在表单验证后,我希望呈现正确的表单(以前无论我使用什么形式,它都会回到默认表单).

我有一个问题,只有部分被渲染(显然,因为我只渲染部分),但我需要渲染布局/应用程序文件.

class RegistrationsController < Devise::RegistrationsController
  def create
  <!-- Other devise code here -->
    if resource.company_form
      render partial: 'shared/company_signup_form'
    else
      render partial: '/shared/individual_signup_form'
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

我试过了

if resource.company_form
    render partial: 'shared/company_signup_form', layout: 'layouts/application'
  else
    render partial: '/shared/individual_signup_form', layout: 'layouts/application
  end
Run Code Online (Sandbox Code Playgroud)

但我得到一个错误

Template is missing
Missing partial layouts/_application 
Run Code Online (Sandbox Code Playgroud)

当我指定布局时为什么要查找部分_application,如何才能获得正确的布局

谢谢

编辑

阅读它所说的文件

"请注意,partials的布局遵循与常规partials相同的前导下划线命名,并且与它们所属的部分放在同一个文件夹中(不在master layouts文件夹中)."

但我希望应用默认布局

Dee*_*Jha 6

控制器中的部分呈现最常与Ajax调用一起使用,Ajax调用仅更新页面上的一个或几个元素而不重新加载.从控制器渲染部分可以在整页渲染中使用相同的部分模板(通过在模板内调用它)和子页面更新发生时(从响应Ajax调用的控制器操作).默认情况下,不使用当前布局.

这可能是您的代码无法工作的原因,您可以使用渲染模板.

模板渲染的工作方式与动作渲染类似,只是它采用相对于模板根的路径.将自动应用当前布局.

if resource.company_form
   render :template => "shared/company_signup_form"
else
   render :template => "shared/individual_signup_form"   
end
Run Code Online (Sandbox Code Playgroud)

**从您的部分名称删除UNDERSCORE,因为您将此作为模板使用.

希望这个有效!


Ric*_*wis 5

最后(我知道这是一个 hack)但我在我的布局中创建了一个名为 _partial_layout_wrapper 的部分,它是布局/应用程序文件的精确副本,并在我的控制器中使用它

render partial: 'shared/company_signup_form', layout: 'partial_layout_wrapper'
Run Code Online (Sandbox Code Playgroud)

这行得通,但肯定不是这样吗?