我有两种方法可以做到这一点。
首先使用:locals => {....}
,其他人使用@var_name
。我只是想知道哪一个更好/更喜欢?我无法在任何地方找到答案。
由于
答案 0 :(得分:7)
我没有经验,但可能你使用@var_name
编写了更少的代码,但是如果让我们说你有2个动作用不同的对象呈现相同的视图让我们说一个用foo而另一个用bar,你可能会想要使用当地人。
def foos
foos = Foo.all
erb :something, locals: {list: foos}
end
def foos
bars = Foo.all
erb :something, locals: {list: bars}
end
而不是@vars,你必须使用相同的var_name,它不能真正代表内部的内容。喜欢:这是什么?
的列表def bars
@list = Bar.all
erb :something
end
def foos
@list = Foo.all
erb :something
end
或许你应该对@vars很好,因为大多数时候你在渲染相同类型的对象时重用一个视图:
def foos
@foos = Foo.all
erb :something
end
def bar_foos
@foos = Foo.where(bar: true)
erb :something
end
因此,您可能只想在渲染部分内容时使用局部视图,而大部分时间都是在不同的上下文中使用。就像渲染@new_bar和现有@bar时的表单一样。只是一个例子。或者例如@current_user或简单的@user