1

私は2つの配列を持っています:

@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

または、次のワンライナーを試すこともできます。

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

@genresへの呼び出しで配列を設定していると仮定していますGenre.all

次のようなことが簡単にできます。

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

idsこれらの名前のジャンルの を取得する場合。

于 2013-03-21T01:09:49.203 に答える