0

コードのチャンク (ショッピング カート) をインデックスのヘッダーに表示し、2 つのコントローラーのページを表示しますが、アプリの他の部分は表示しません。

私の現在の計画は、このコードを部分的に配置することです。

 = render partial 'layouts/cart' if the params[:controller] == "Products" || params[:controller] == "Categories"

より良い方法はありますか?Rails 3.2を使用しています

4

3 に答える 3

1

私はerbを使用しています。hamlはわかりませんが、アイデアは簡単に転送できるはずです

content_forを使用して問題を解決できます。

カートを表示するビュー ファイルにこのコードを追加します。

Products/show.html.erb Products/index.html.erb Categories/show.html.erb,Categories/index.html.erb (質問のように)。

<% content_for :cart,  render('layouts/cart') %>

今すぐ呼び出します:

<%= yield :cart %>

application.html.erb (またはカートを表示したい場所) で。

:

レイアウト/アプリケーション:

<!DOCTYPE html>
<html>
  <head>
    <title>Testapp</title>
    <%= stylesheet_link_tag    "application", :media => "all" %>
    <%= javascript_include_tag "application" %>
    <%= csrf_meta_tags %>
  </head>
  <body>
    <%= yield :cart%>
    <%= yield %>
  </body>
</html>

製品/ショー:

<% content_for :cart,  render('layouts/cart') %>

<p>I have content_for call so my appilication.html will dispaly cart partial</p>

製品/インデックス:

<p>I don't have content_for call so my appilication.html will not dispaly cart partial</p>

レイアウト/カート:

<h1>Here I am!</h1>

Products インデックス パスにアクセスすると、次のものが生成されます。

I don't have content_for call so my appilication.html will not dispaly cart partial

Products show パスにアクセスすると、次のものが生成されます。

Here I am!
I have content_for call so my appilication.html will dispaly cart partial
于 2013-03-26T14:27:04.987 に答える
0

そこで行っていることに本質的に問題はありませんが、多くの場所に配置する必要がある場合、エラーが発生しやすくなる可能性があります。

あなたは残すことができます

= render partial 'layouts/cart'

使いたい場所、置きたい場所

if the params[:controller] == "Products" || params[:controller] == "Categories"

部分的なので、ロジックを1か所だけに保持しています

于 2013-03-26T03:31:07.867 に答える
0

ビューからロジックを除外するようにしてください (パーシャルを含む)。したがって、最善の方法は、それをヘルパーにオフロードすることです。

helpers/application_helper.rb

module ApplicationHelper
  def show_cart
    render 'layouts/cart' if ['Products', 'Categories'].include?(params[:controller])
  end
end

ビューで

<%= show_cart %>
于 2013-03-26T03:36:58.360 に答える