【问题标题】:Is there a way to store a variable while in a view in Rails?有没有办法在 Rails 的视图中存储变量?
【发布时间】:2016-04-17 22:00:17
【问题描述】:

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

例如

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

【问题讨论】:

  • 您是要在一个视图中两次渲染同一个百吉饼,还是希望百吉饼在请求中持续存在?
  • @NateSHolland 我希望在每个请求中初始化并保存该变量,以便以后在当前请求中使用,无需持久化
  • 接下来会发生什么?更多观点?如果是这样...也许您应该在控制器中获取/存储变量以传递到您将使用的各种视图中。
  • @TarynEast 我知道可以在控制器中完成,我问是否可以在视图中完成。这个想法是我的 .html.erb 的开头根据条件设置一个变量,然后在 .html.erb 的更下方,该变量被使用...
  • 这是可能的,但这不是好的做法。如果您可以在控制器中执行此操作,那么您可能应该这样做。如果您在 same 视图模板中(而不是在另一个模板中),那么可以确定 - 继续设置变量(我们一直这样做),但是如果您转到另一个要使用的模板这个变量......那么它应该在调用范围内设置,而不是在多个模板中使用的魔法变量,如果你明白我的意思:)

标签: ruby-on-rails variables model-view-controller view model


【解决方案1】:

这可以通过这个来实现

       #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

【讨论】:

    【解决方案2】:

    如果您在 same 视图模板中(而不是在另一个模板中),那么请确保 - 继续设置变量,就像在您的示例中一样。我们一直这样做。

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

    可以这样做,但这不是好的做法。如果您可以在控制器中执行此操作,那么您可能应该这样做。

    就您而言...我认为您在 @bagels 变量上多次调用 active_bagel 应该没有问题。

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

    【讨论】:

    • 感谢您的信息,通常情况下是按照 Antarr 在回答中解释的方式进行的吗?
    • 不,没有通常的方法,因为通常我们不会跨模板进行。 Antarr 是一种 hacky 方式(尽管它确实回答了你的问题) - 而且它不涉及在以后的 ruby​​ 中使用它 - 你将使用 javascript 在以后的模板中再次将其拉出,这意味着其他 ruby​​ 将无法访问它在其他模板中。
    • 澄清一下,我不会在其他模板中使用这个变量,只有当前模板的当前呈现。仍在寻找一种方法来做到这一点。
    • 正如我在回答中所说的那样 - 如果它在同一个模板中,那么你现在所做的就很好:)
    • 那么我在示例中发布的内容会起作用吗?即使变量“百吉饼”在调用时不存在?我可以像这样初始化变量吗?
    【解决方案3】:

    您可以使用data-attributes

    tag("div", class: :bagel, :data => {bagel_id: 3})
    

    然后使用jQuery.data() 检索值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-15
      • 1970-01-01
      • 2020-03-17
      • 2011-06-10
      • 1970-01-01
      • 2021-11-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多