[英]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.