繁体   English   中英

Rails 从子目录渲染部分

[英]Rails render partial from sub-directory

我刚刚在我的 rails 应用程序中实现了 Devise Invitable gem,现在我在渲染我的部分时遇到了问题。 我想这是因为绝对路径与相对路径。

我不愿在application.html.erb进行太多更改,因为我的所有其他视图都依赖于正在呈现的部分。 那么,有没有另一种方法可以使这一切正常工作?

这是目录树:

app/
 -controllers/
 ---application_controller.rb
 ---users/
 -----invitations_controller.rb
 -views/
 ---layouts/
 -----application.html.erb
 -----_back_buttons.html.erb
 -----_footer.html.erb
 -----_navigation.html.erb
 ---users/
 -----invitations/
 -------new.html.erb
 -------edit.html.erb

在我的application.html.erb文件中,我目前正在渲染视图和部分:

<%= render partial: 'layouts/navigation' %>
<%= render partial: 'layouts/topnav' %>
<%= render partial: 'layouts/tour' %>

<%= yield %>

<%= render partial: 'layouts/footer' %>
<%= javascript_include_tag 'footermanifest' %>

在我的新视图views/users/invitations/new.html.erb

<%= render partial: "/layouts/back_button" %>
... the form

注意这里对部分的绝对引用 (/)

这很好地加载了layouts/_back_button.html.erb ,但没有加载application.html.erb中的其他部分。 基本上,我有一个带有表单的非常空的页面(由 application.html.erb 提供)。

我是否在嵌套views/users/invitations/new.html.erb或其他方面做错了什么?

更新开始思考......因为我不希望 ppl 创建一个“新”用户帐户来查看导航和所有内容,所以我在controllers/application_controller.rb为他们强制使用不同的布局:

def layout_by_resource
    if devise_controller? && resource_name == :user && action_name == "new"
      "external_pages"
    else
      "application"
    end
end

那么,有没有办法进一步指定layout_by_resource以便我的`controller/user/invitation_controller.rb 不在此范围内?

好的,虽然我希望少一点“重复自己”,但强制控制器呈现不同的布局有效:

class Users::InvitationsController < Devise::InvitationsController
  before_action :get_company_and_locations
  layout "application"

  def new
    ...
  end
end

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM