2016-09-24 5 views
1

yelpと非常によく似た機能を持つレールアプリがあり、顧客のためにダッシュボードを使って場所を編集したり、今のところ1つの場所しか持てません。ダッシュボードサイドバーでyieldを使用して同じページにコンテンツを表示する方法

私はダッシュボードコントローラを作成しました。サイドバー用の部分的なビューがありましたが、これまでのところすべてが機能していましたが、私の問題はサイドバーのリンクをクリックするとapplication.html.erbになります。サイドバーからダッシュボード/ index.html.erbの主要部分にすべてを譲りたい

私の質問は、私がサイドバーの右側にある部分にサイドバーでクリックするものページ上に基本的に機能はトップにあるnavbarのようなものです(ログインした顧客のみ)が、2つの利回りで混乱します。私は "content_for"と<%= yield:sidebar%>を試しましたが、まだそれを稼働させる方法を理解していませんでした。また、私はビューを共有し、 "content_for"に問題を引き起こすかもしれないダッシュボードのサイドバーで彼のユーザーアカウントを編集するための機能を持っているユーザーと顧客モデルとdeviseを使用していますか?

私はまだレール上でルビーを学んでおり、どんな種類の入力に対しても非常に満足しています。

dashboard_controller.rb

def index 
    @place = Place.where(customer_id: current_customer.id).first 
end 

ダッシュボード/ index.html.erb

<div class="content"> 
    <div class="sidebar"> 
     <%= render 'dashboard/sidebar' %> 
    </div> 
    <div class="main"> 
     <%= yield %> 
    </div> 
</div> 

_sidebar.html.erb

<li class="nav-link"> 
    <%= link_to "<span class='fa fa-cog'></span>&nbsp;&nbsp;Edit".html_safe, edit_place_path(@place) %> 
</li> 
<li class="nav-link"> 
    <%= link_to "<span class='fa fa-cog'</span>&nbsp;&nbsp;Settings".html_safe, edit_customer_registration_path %> 
</li> 
<li class="nav-link"> 
    <%= link_to "<span class='fa fa-sign-out'></span>&nbsp;&nbsp;Log Out".html_safe, destroy_customer_session_path, method: :delete %> 
</li> 

application.html.erb

<body> 
    <%= render 'layouts/shared/header' unless @disable_navbar %> 
    <%= yield %> 
    <%= render 'layouts/shared/footer' unless @disable_footer %> 
</body> 
+0

http://guides.rubyonrails.org/layouts_and_rendering.html#understanding-yield – max

答えて

0

レイアウトのコンテキスト内で、yieldは、ビューからコンテンツ が挿入されるべきセクションを示します。
http://guides.rubyonrails.org/layouts_and_rendering.html#understanding-yield

のでノー - あなたのdashboard/index.html.erbに降伏しません "利回り"。むしろ異なるレイアウトにしたい場合は、create a layoutにする必要があります。

<% # app/views/layouts/application.html.erb %> 
<body> 
    <nav id="top-menu"> 
    <h1><%= link_to 'MyApp', root_path %></h1> 
    <ul> 
    <%= yield :nav_links %> 
    <%# lets provide some default content for nav_links %> 
    <% content_for :nav_links do %> 
     <li><%= link_to 'Products', products_path %></li> 
    <% end %> 
    </ul> 
    </nav> 
    <div id="main"> 
    <%= yield %> 
    </div> 
</body> 

ここでは、:nav_linksと呼ばれるレイアウトの名前の歩留まりを作成してもcontent_for :nav_linksでいくつかの「デフォルト」のコンテンツを追加します。

は例を見てみましょう。

だから我々は/products/index.html.erbをレンダリングするときに何が起こるかを見てみましょう:

<div class="products"> 
    <% if @products.any? %> 
    <%= render @products %> 
    <% else %> 
    <p>No products are available at this time</p> 
    <% end %> 
</div> 
<%# we also want to add a contextual navigation link %> 
<% content_for(:nav_links) do %> 
    <li><%= link_to 'Sales', sales_path %></li> 
<% end %> 

レンダリング結果は次のとおりです。

<body> 
    <nav id="top-menu"> 
    <h1><a href="/">MyApp</a></h1> 
    <ul> 
    <li><a href="/products">Products</a></li> 
    <li><a href="/products">Sales</a></li> 
    </ul> 
    </nav> 
    <div id="main"> 
    <div class="products"> 
     <p>No products are available at this time</p> 
    </div> 
    </div> 
</body> 

Railsは、「メイン」のレイアウトやコンテンツへのビューからコンテンツを挿入content_for(:nav_links)がバッファに連結されます。

また、私は 見解を共有し、ユーザーと顧客モデルを考案し、 「content_for」に問題を引き起こす可能性がありますダッシュボードのサイドバーに自分のユーザ アカウントを編集するために、顧客のための機能を持って使用していますか?あなたが持つかもしれ

唯一の問題は、「名前空間の衝突」である - あなたはyield :sidebarを使用していて、例えば宝石はまた、あなたが予期しない結果が生じる可能性があり歩留まりに同じ名前を使用している場合。

関連する問題