Rails从子目录渲染部分

时间:2017-01-19 16:31:46

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

我刚刚在我的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不属于这个范围?

1 个答案:

答案 0 :(得分:0)

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

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

  def new
    ...
  end
end