Sinatra将变量传递给erb

时间:2012-12-23 18:38:39

标签: ruby sinatra

我有两种方法可以做到这一点。

首先使用:locals => {....},其他人使用@var_name。我只是想知道哪一个更好/更喜欢?我无法在任何地方找到答案。

由于

1 个答案:

答案 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