簡體   English   中英

Rails 從子目錄渲染部分

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM