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

Ruby on rails RubyonRails:Helper方法向视图返回多个值,ruby-on-rails,helper,Ruby On Rails,Helper,我有一个helper方法,它向一个视图返回大约10个值/变量。如果我需要使用局部变量而不是助手返回的实例变量,那么在视图中调用这个方法是一件麻烦事 我也不想对所有这些不同的值使用多个helper方法,因为它会复制我的代码 例如: 示例_helper.rb def multiple_return_values return a,b,c,d,e,f,g,h,i,j end 示例_view.html.erb <% a,b,c,d,e,f,g,h,i,j = multiple

我有一个helper方法,它向一个视图返回大约10个值/变量。如果我需要使用局部变量而不是助手返回的实例变量,那么在视图中调用这个方法是一件麻烦事

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

例如: 示例_helper.rb

  def multiple_return_values
    return a,b,c,d,e,f,g,h,i,j
  end
示例_view.html.erb

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

我不想使用上面这些代码块,例如_view.html.erb。我也不想使用来自helper的实例变量。我只想在视图中使用局部变量

在仅使用局部变量的视图中使用帮助器返回的多个值的最佳方法是什么?

TLDR:如果返回值很少,我首选解决方案1.1;如果返回值太少,则首选解决方案1.2

解决方案1.1 解决方案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
用法 那么在你看来,

<% returned_values = multiple_returned_values -%>

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

<%= returned_values.a %>
<%= returned_values.b %>
<%= returned_values.g %>
<% somebinding = multiple_return_values_binding -%>

<%= somebinding.local_variable_get(:a) %>
<%= somebinding.local_variable_get(:b) %>
<%= somebinding.local_variable_get(:g) %>
用法 那么在你看来,

<% returned_values = multiple_returned_values -%>

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

<%= returned_values.a %>
<%= returned_values.b %>
<%= returned_values.g %>
<% somebinding = multiple_return_values_binding -%>

<%= somebinding.local_variable_get(:a) %>
<%= somebinding.local_variable_get(:b) %>
<%= somebinding.local_variable_get(:g) %>
用法 那么在你看来,

<% returned_values = multiple_returned_values -%>

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

<%= returned_values.a %>
<%= returned_values.b %>
<%= returned_values.g %>
<% somebinding = multiple_return_values_binding -%>

<%= somebinding.local_variable_get(:a) %>
<%= somebinding.local_variable_get(:b) %>
<%= somebinding.local_variable_get(:g) %>

另一种方法是,您可以返回open struct instance并通过my_struct=multiple_return_值然后通过my_struct.x my_struct.y my_struct.z从中获取值。。。