【问题标题】:Rails render partial from sub-directoryRails 从子目录渲染部分
【发布时间】:2017-01-19 16:31:46
【问题描述】:

我刚刚在我的 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 或其他什么方面做错了吗?

更新 开始思考......因为我不希望人们创建一个“新”用户帐户来查看导航和所有内容,所以我在 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 不在此范围内?

【问题讨论】:

  • 我希望你的意思是 application.html.erb 而不是 application.rb
  • @maxple 是的,对不起...
  • 在一个有效的示例中,您在部分路径的开头有一个 /(斜杠)。我想知道将其添加到其他人是否可行。
  • @maxple 我确实尝试过,但是application.html.erb 中的领先/ 仍然不会在views/users/invitations/... 中的新视图中呈现部分内容

标签: ruby-on-rails ruby ruby-on-rails-3 devise


【解决方案1】:

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

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

  def new
    ...
  end
end

【讨论】:

    猜你喜欢
    • 2017-11-29
    • 1970-01-01
    • 2017-05-15
    • 1970-01-01
    • 1970-01-01
    • 2011-12-17
    • 1970-01-01
    • 2017-05-07
    • 2016-12-10
    相关资源
    最近更新 更多