我刚刚在我的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不属于这个范围?
答案 0 :(得分:0)
好的,所以虽然我希望少一点“重复自己”,但强迫控制器呈现不同的布局:
class Users::InvitationsController < Devise::InvitationsController
before_action :get_company_and_locations
layout "application"
def new
...
end
end