もっと良い方法があるかもしれませんが、コントローラの現在のアクションに基づいて、if文をレールに作成しようとしています。ビューで使用する)。コントローラのアクションに基づく条件文( 'if')文
たとえば、編集ページ、または表示ページなどの場合、私は何か別のスタイルを使いたいと思います。これを指定できるif文はありますか?
(if文は部分的に複数のページで使用されるため、必要です)。
ありがとうございます!
エリオット
もっと良い方法があるかもしれませんが、コントローラの現在のアクションに基づいて、if文をレールに作成しようとしています。ビューで使用する)。コントローラのアクションに基づく条件文( 'if')文
たとえば、編集ページ、または表示ページなどの場合、私は何か別のスタイルを使いたいと思います。これを指定できるif文はありますか?
(if文は部分的に複数のページで使用されるため、必要です)。
ありがとうございます!
エリオット
コントローラは、要求のコントローラとアクション名を指定:controller
と:action
キーを含んで提供されparams
ハッシュ。
そのため、あなたはこのようにそれを行うことができます
if params[:action] == "foo"
# Show stuff for action 'foo'
elsif params[:action] == "bar"
# Show stuff for action 'bar'
elsif ...
# etc.
end
を言うことができる:
class ApplicationController < ActionController::Base
layout :set_layout
def set_layout
case params[:action]
when "foo"
"foo_layout"
when "bar"
"bar_layout"
...
else
"default_layout"
end
end
...
end
はそれが=に役立ちます願っています)
あなたもパーシャルのためのレイアウトを使用することができます。
<%= render :partial => 'some_partial', :layout => 'wrap_with_stuff' %>
を
oどのレイアウトを動的に使うのか、私はそれをヘルパーに入れます。ですから、
# In your view
<%= render :partial => 'some_partial', :layout => layout_for_my_partial %>
# In your helper
def layout_for_my_partial
params[:action] == 'show' ? 'show_wrapper' : 'everything_else_wrapper'
end
これで終わるだろうとだけいくつかの状況では動作しますが、あなたが何をしようとしてかもしれません。
詳細はこちらをご覧ください。
http://ryandaigle.com/articles/2007/8/3/what-s-new-in-edge-rails-partials-get-layouts
これは、現在のコントローラとアクションの名前が何であるかを尋ねるパーシャルを持っているIMO良い習慣ではありません。 「教えて、尋ねないでください」と考えてください(http://www.pragprog.com/articles/tell-dont-ask)。つまり、部分的にその状態についての呼び出し元に尋ねるのではなく、に部分的に指示します。
<%= render :partial => "/common/toolbar", :locals => {:edit => true} %>
その後、部分的に:これを行うには
一つの方法は、locals
オプションによって部分的に変数を渡すことである
<% if defined?(edit) && edit %>
... stuff appropriate to edit mode
<% end %>
恐ろしい感謝!!!! – Elliot
多くのおかげさま...未来からのメッセージ:D –