Ruby on rails:Helper方法向视图返回多个值

问题描述 投票:0回答:1

我有一个帮助方法,它返回10个值/变量到视图。如果我需要使用局部变量而不是助手返回的实例变量,那么在视图中调用此方法是一团糟。

我也不想对所有这些不同的值使用多个辅助方法,因为它会复制我的代码。

例如:example_helper.rb

  def multiple_return_values
    return a,b,c,d,e,f,g,h,i,j
  end

example_view.html.erb

  <% a,b,c,d,e,f,g,h,i,j = multiple_return_values %>

要么

  <% values = multiple_return_values %>
  <% values[0] %>
  <% values[1] %>
  .
  .
  .
  <% values[9] %>

我不想使用上面这些代码块(例如example_view.html.erb)。我也不想使用来自帮助器的实例变量。我想在视图中只使用局部变量。

使用仅局部变量在视图中使用辅助函数返回的这些多值的最佳方法是什么?

ruby-on-rails helper
1个回答
1
投票

TLDR:我的偏好是解决方案1.1,如果只有少数返回值,而解决方案1.2,如果loooooads返回值

解决方案1.1

def multiple_return_values
  # ...
  return {
    a: a,
    b: b,
    c: c,
    d: d,
    e: e,
    f: f,
    g: g,
    h: h,
    i: i,
    j: j
  }
end

解决方案1.2

或者,如果您希望不重复解决方案1.1中的“键”和“值”,则:

def multiple_return_values
  # ...
  local_variables_to_be_returned = [:a, :b, :c, :d, :e, :f, :g, :h, :i, :j]
  return Hash[local_variables_to_be_returned.map{|v| [v, binding.local_variable_get(v)]}]
end

Usage

然后在你的意见中,

<% returned_values = multiple_returned_values -%>

<%= returned_values[:a] %>
<%= returned_values[:b] %>
<%= returned_values[:g] %>

解决方案2

请参阅@ HankPhung的评论:要返回OpenStruct实例而不是Hash,那么您只需使用OpenStruct.new(HASH)

def multiple_return_values
  # ...
  local_variables_to_be_returned = [:a, :b, :c, :d, :e, :f, :g, :h, :i, :j]
  return OpenStruct.new(
    Hash[local_variables_to_be_returned.map{|v| [v, binding.local_variable_get(v)]}]
  )
end

Usage

然后在你的意见中,

<% returned_values = multiple_return_values -%>

<%= returned_values.a %>
<%= returned_values.b %>
<%= returned_values.g %>

解决方案3

不建议;只是特定于案例的用法

您可以直接传入binding作为返回值

def multiple_return_values_binding
  # ...
  return binding
end

Usage

然后在你的意见中,

<% somebinding = multiple_return_values_binding -%>

<%= somebinding.local_variable_get(:a) %>
<%= somebinding.local_variable_get(:b) %>
<%= somebinding.local_variable_get(:g) %>
© www.soinside.com 2019 - 2024. All rights reserved.