似乎在控制器的操作(方法)中设置多个实例变量会导致模板出现问题,只有第一个实例变量才会传递给模板。有没有办法将多个变量传递给模板?谢谢!为什么,从Ruby的角度来看,模板是否可以访问动作中的实例变量?
答案 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选项设置局部变量比使用实例变量更简单,更干燥。