【发布时间】: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