如何将ActiveRecord结果数组转换为普通数组?

Spe*_*hal 22 ruby ruby-on-rails

如何将@ recipe.components.find([#<Component ingredient_id:1>,#<Component> ingredient_id:2>])的结果集转换为[1,2]等数组

<% @ingredients.each do |ingredient| %>
  <div class="field">
  <%= check_box_tag 'ingredients[]', ingredient.id, @recipe.components.find(:all, :select => "ingredient_id").include?(ingredient.id) %><%= ingredient.name %>
  </div>
<% end %>
Run Code Online (Sandbox Code Playgroud)

谢谢!

nop*_*ole 32

您可以使用

@result.map {|i| i.ingredient_id }
Run Code Online (Sandbox Code Playgroud)


Var*_*hra 24

如果您使用的是最新版本的ruby,则有新的方法可以执行此操作:

@result.map(&:ingredient_id)
Run Code Online (Sandbox Code Playgroud)

节省时间,清洁,易于理解.

  • 看起来Ruby正在获得更多隐藏的能力. (9认同)
  • @Spechal哦,我忘了提,如果你使用Rails 3.2.x,有一个更简单的方法!只需调用MyModel.find(*conditions*).pluck(&:ingredient_id)...这个速度要快得多,因为pluck方法基本上是单列选择所以你不会浪费时间来获取所有数据,当然假设你只想要一列中的值! (3认同)

Rec*_*nic 6

或者更简洁 @result.map! &:ingredient_id


小智 6

你也可以使用:

@result.pluck(:ingredient_id)
Run Code Online (Sandbox Code Playgroud)