2011-09-06 5 views
6

私はRuby on Rails 3.0.10を使用しており、いくつかのパラメータをデフォルトのレンダリング方法に渡したいと思います。私はデフォルトのレンダリング方法にいくつかのパラメータを渡すには?

def show 
    ... 

    respond_to do |format| 
    format.html # This, by default, renders the 'show.html.erb' file 
    end 
end 

のようなコードを持って、私は多分のように、いくつかのパラメータを渡したい場合には、です(注:以下では動作しません)show.html.erbテンプレートでそう

def show 
    ... 

    respond_to do |format| 
    # Here I would like to add some local objects that will be available in the 'show.html.erb' template file 
    format.html { render ..., :locals => { :content => { :value => 'Sample value' } } } 
    end 
end 

ことをI以下のようなものにすることができます:に関連する部分テンプレートのレンダリングのために作られたとしていくつかの単語で

<%= 
    content[:value] 
    # => 'Sample value' 
%> 

を、私は同じようにパラメータ値を渡すしたいと思いますキー

render :partial, 
     :locals => { 
      :content => { :value => 'Sample value' } 
     } 

私はそれをどのように行うことができますか?

答えて

6

あなたが説明したことを正確に行うことができます。私はここでそれを見てhttp://apidock.com/rails/ActionController/Base/renderという見出しの下に "テンプレートをレンダリング"し、自分自身に渦を吹き込んだ。あなたは毎日新しいことを学びます。

あなたは、単にあなたの代わりにインスタンス変数を使用するのでは、これを行うために必要とする理由私は考えるでしょう

def show 
    respond_to do |format| 
    format.html { render :locals => { :content => { :value => 'Sample value' } } } 
    end 
end 

を行うことができます。たぶん、より良いアプローチがあります。

3

インスタンス変数を設定するのはどうですか?通常

# your_controller.rb 

def show 
    @content_value = ... 
end 

 

# show.html.erb 

<%= @content_value %> 
+0

質問に記載されているアプローチは、あなたが提案したアプローチよりも優れていると思います。あなたが提案したように何らかの理由がありますか?何について助言していますか? – Backo

1

我々は行動show.html.erbで作業している私たちは、このような

として、コントローラ上のインスタンス変数を経由してパラメータを渡している、 actionビューではなく partial図であり、
def show 
    ... 
    @foo = "bar" 
    respond_to do |format| 
    format.html 
    end 
end 

app/views/foos/show.html.erbファイルには、@fooにアクセスできます。パーシャルをレンダリングする場合

、パラメータを渡すためにいくつかの方法があります。

それは@fooがタイプFooであることを知っているので、これはデフォルトで部分的app/views/foos/_foo.html.erbをレンダリングします。その中で、foo変数に自動的にアクセスできます。

<%= render @foo %> 

ここではapp/views/foos/_foo_details.html.erbをレンダリングしてオブジェクトを渡します。オブジェクトは部分の名前を取るので、_foo_details.html.erbの内部ではという変数にアクセスできます。

<%= render :partial => "foo_details", :object => @foo %> 

最後に、そしてあなたの質問にほとんど関連し、我々は_foo_things.html.erbと呼ばれる部分をレンダリングし、それにいくつかの地元の人々を渡します。この場合、作業できるローカル変数titleが得られます。

<%= render :partial => "foo_things", :locals => {:title=> "Test 123"} %> 

あなたの質問にお答えしたいと思います。

関連する問題