2011-09-06 58 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 

讓我可以是這樣的:

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

在幾句話,我想通過相同的方式參數值,作爲關係到局部模板渲染製作關鍵

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

我怎麼能這樣做?

回答

6

您可以完全按照您的描述進行操作。我在http://apidock.com/rails/ActionController/Base/render的標題「Rendering a template」下查找它,並給它一個旋轉。你每天學習新的東西。

你可以簡單地做

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

當渲染的諧音,也有一些方法來傳遞參數:

默認將呈現局部app/views/foos/_foo.html.erb因爲它知道@fooFoo類型。其中,您將可以自動訪問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"} %> 

我希望能回答你的問題。