使用include比较两个数组?

时间:2013-03-21 01:00:15

标签: ruby-on-rails ruby

我有两个数组:

@all_genres = [#<Genre id: 1, name: "Action", created_at: "2013-03-01 07:44:51", updated_at: "2013-03-01 07:44:51">,
               #<Genre id: 2, name: "Adventure", created_at: "2013-03-01 07:44:51", updated_at: "2013-03-01 07:44:51">,
               #<Genre id: 3, name: "Animation", created_at: "2013-03-01 07:44:51", updated_at: "2013-03-01 07:44:51">]

@genres = ["Action", "Animation"]

我试图找到Genre.id@genres表格相比较的@all_genres。例如,我的结果应该是:

@genre_ids = [1, 3]

我试过这个:

@all_genres.each do |g|
  if g.name.include?((@genres.each {|g| g}).to_s)
    @genre_ids << g.id
  end
end

我在我的控制台中尝试了这个并且它似乎有效,但当我把它放入我的应用程序时它会返回:

@genre_ids = []

3 个答案:

答案 0 :(得分:6)

更多铁路版本:

@genre_ids = Genre.where(name: @genres).pluck(:id)

答案 1 :(得分:2)

我假设您通过拨打@genres来填充Genre.all数组。

你可以简单地做这样的事情:

Genre.where("name IN (?)", %w[name action]).collect { |x| x.id }

如果您想为这些名称检索类型的ids

答案 2 :(得分:2)

或者你可以试试这个单行:

@genre_ids = @all_genres.select{|g| @genres.include? g.name }.map(&:id)