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

6

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

2个回答

4
您不应该在设置多个实例变量时遇到任何问题。例如:
class CarsController < ApplicationController
  def show
    @car = Car.find(:first)

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

这将允许您在cars/show.html.erb中访问@car和@category两个变量。

这能够实现的原因并不是Ruby本身的特性,而是Rails内置的一些神奇功能。Rails会自动将控制器操作中设置的任何实例变量提供给相应的视图。


4
你可能还想了解render的: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”选项设置本地变量比使用实例变量更加简单和DRY。


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