看起来在控制器的动作(方法)中设置多个实例变量会导致模板出现问题,只有第一个实例变量被传递到模板。有没有办法将多个变量传递到模板中?谢谢!并且从Ruby的角度来看,为什么模板可以访问动作中的实例变量?
看起来在控制器的动作(方法)中设置多个实例变量会导致模板出现问题,只有第一个实例变量被传递到模板。有没有办法将多个变量传递到模板中?谢谢!并且从Ruby的角度来看,为什么模板可以访问动作中的实例变量?
class CarsController < ApplicationController
def show
@car = Car.find(:first)
@category = Category.find(:first)
end
end
这将允许您在cars/show.html.erb中访问@car和@category两个变量。
这能够实现的原因并不是Ruby本身的特性,而是Rails内置的一些神奇功能。Rails会自动将控制器操作中设置的任何实例变量提供给相应的视图。
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”选项设置本地变量比使用实例变量更加简单和DRY。