5

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

一是使用:locals => {....},二是使用@var_name。我只是想知道哪个更好/更喜欢?我在任何地方都找不到这个问题的答案。

谢谢

4

1 回答 1

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

于 2012-12-23T18:48:56.280 回答