2011-09-06 48 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"} %> 

我希望能回答你的问题。