如何将参数从控制器传递到模板?

时间:2009-12-22 04:24:28

标签: ruby-on-rails

似乎在控制器的操作(方法)中设置多个实例变量会导致模板出现问题,只有第一个实例变量才会传递给模板。有没有办法将多个变量传递给模板?谢谢!为什么,从Ruby的角度来看,模板是否可以访问动作中的实例变量?

2 个答案:

答案 0 :(得分:4)

设置多个实例变量时不应该有任何问题。例如:

class CarsController < ApplicationController
  def show
    @car = Car.find(:first)

    @category = Category.find(:first)
  end
end

允许您访问cars / show.html.erb中的@car和@category

这种作用的原因并不是红宝石所固有的,而是一些内置于轨道中的魔法。 Rails自动使控制器操作中设置的任何实例变量可用于相应的视图。

答案 1 :(得分:4)

您可能还想查看渲染的:locals选项。它接受哈希,使得键是映射到模板中的局部变量名称的符号,值是将这些局部变量设置为的值。

示例:

render "show", :locals => {:user => User.first, :some_other_variable => "Value"}

和这个模板

User ID: <%= user.id %><br>
Some Other Variable: <%=some_other_variable%>

将产生:

User ID: 1<br>
Some Other Variable: Value

当您在多个控制器中重复使用部分时。使用:locals选项设置局部变量比使用实例变量更简单,更干燥。