如何将一些参数传递给默认的渲染方法?

时间:2011-09-06 23:06:51

标签: ruby-on-rails ruby ruby-on-rails-3 parameters rendering

我正在使用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

我想传递一些参数,也许就像(注意:以下不起作用)

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

以便在show.html.erb模板中我可以创建类似的内容:

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

简而言之,我希望以与:locals相关的部分模板渲染相同的方式传递参数值:

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

我该怎么做?

3 个答案:

答案 0 :(得分:6)

您可以完全按照您的描述进行操作。我在这里http://apidock.com/rails/ActionController/Base/render在“渲染模板”标题下查找了它并自己给了它一个旋转。你每天都学到新东西。

你可以简单地做

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

我会考虑为什么你需要这样做而不是使用实例变量。也许有更好的方法。

答案 1 :(得分:3)

如何设置实例变量

# your_controller.rb

def show
  @content_value = ...
end

# show.html.erb

<%= @content_value %>

答案 2 :(得分:1)

通常当我们处理动作show.html.erbaction视图而不是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,因为它知道@foo的类型为Foo。在其中,您可以自动访问foo变量。

<%= render @foo %>

这里我们将呈现app/views/foos/_foo_details.html.erb,并传入一个对象。该对象采用部分名称,因此在_foo_details.html.erb内,我们可以访问名为foo_details的变量。

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

最后,主要与您的问题相关,我们将呈现一个名为_foo_things.html.erb的部分并将其传递给一些本地人。在这种情况下,您将获得一个名为title的局部变量,您可以使用它。

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

我希望能回答你的问题。