如何向默认渲染方法传递一些参数?

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

我想传递一些参数,可能像这样(注意:以下内容不起作用)

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个回答

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 %>

我认为问题描述中的方法(或许)比你提出的更好...按照你提出的方式有什么理由吗?你有什么建议? - 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中,我们将可以访问名为foo_details的变量。
<%= render :partial => "foo_details", :object => @foo %>

最后,与您的问题大多相关的是,我们将呈现一个名为_foo_things.html.erb的部分,并传递一些本地变量。在这种情况下,您将获得一个名为title的本地变量,您可以使用它。
<%= render :partial => "foo_things", :locals => {:title=> "Test 123"} %>

我希望这能回答你的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接