1

我有两个数组:

@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.idfrom 。例如我的结果应该是:@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 = []
4

3 回答 3

6

一个更轨道式的版本:

@genre_ids = Genre.where(name: @genres).pluck(:id)
于 2013-03-21T01:58:34.617 回答
2

我假设您正在@genres通过调用来填充您的数组Genre.all

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

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

如果您想ids使用这些名称检索流派。

于 2013-03-21T01:09:49.203 回答
2

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

@genre_ids = @all_genres.select{|g| @genres.include? g.name }.map(&:id)
于 2013-03-21T01:12:56.147 回答