2016-01-13 135 views
0

如上所述。有没有办法将变量存储在rails的视图中供以后使用,而无需将其设置在该视图的控制器函数中?有没有办法在Rails的视图中存储变量?

ex。

<% bagel = @bagels.active_bagel %> 
... 
<%= bagel.delicious? %> 
+1

你是问有关在视图渲染两次相同的百吉饼或你想百吉跨请求是否仍然存在? – NateSHolland

+0

@NateSHolland我想要将变量初始化并保存在每个请求中以便稍后在当前请求中使用,不需要持久化 – Riptyde4

+0

后来会发生什么?更多意见?如果是这样的话......也许你应该在你的控制器中获取/存储这个变量,以传递给你将要使用的各种视图。 –

回答

1

如果你在相同的视图模板(而不是在另一个模板),那么确定 - 继续前进并设置变量,就像你的例子。我们一直这样做。

...但如果你去另一个模板使用这个变量...那么它应该设置在调用范围内,而不是一个魔术变量,在多个模板中使用,如果你明白我的意思: )

它可以做到这一点,但它不被认为是好的做法。如果你可以在控制器中做到这一点,那么你可能应该这样做。

就你而言......我认为你不应该在@bagels变量上多次调用active_bagel一个问题。

如果你正在尝试这样做,因为你认为它有可能会有一天缓慢....我建议等到它是实际上慢......然后找出如何优化速度然后。如果它是为了其他目的......那么告诉我们这是什么,我们会找出一个更好的方法。

+0

感谢您的信息,是吗?通常是按照Antarr在他的回答中解释的方式完成的? – Riptyde4

+0

不,没有通常的方法,因为通常我们不会通过模板来完成。 Antarr's是一种拙劣的方式(尽管它确实回答了你的问题) - 也不涉及在以后的ruby中使用它 - 你将在后面的模板中使用javascript将其拉出来,这意味着其他ruby将无法访问它在其他模板中。 –

+0

为了澄清,我不会在其他模板中使用此变量,只会使用当前模板的当前渲染。仍在寻找一种方法来做到这一点。 – Riptyde4

0

这可以实现这个

 #app/views/xyz/ 

     #1. make a hidden html input field 
      <input type ="hidden" id = "you_id" value = "<%= yourvariable %>" 

    #if u want to access that variable in every view write your code in app/helper/application_helper 

    #otherwise write in the specific helper something this kind of code 

      def yourvariable 
      #your code 
      return somthing which you want in view 
      end 

     and from that html tag access the value 
相关问题