0

Materials というテーブルがあり、検索フォームを作成しました。フォームには、検索オプションの名前を含む選択ボックスが必要です。たとえば、件名で検索する場合、各件名のドロップダウンが必要です。これが機能するコードがあります:

@subject = Material.unscoped.select(:subject).where("materials.subject IS NOT NULL
and materials.subject != '' ").uniq

これにより、次のフォームヘルパーで必要なものが得られます。

<%= select_tag "subject", options_from_collection_for_select(@subject, "subject", 
"subject"), :include_blank => true, :class => "input_field" %>

BUT - 共有されているマテリアルからそれらのサブジェクトのみを選択したいと思います。そこで、次を使用して共有マテリアルを選択しました。

@shared = Material.where(:status => 'shared')

そして、このコードを実行しました:

@subject = @shared.unscoped.select(:subject).where("@shared.subject IS NOT NULL
and @shared.subject != '' ").uniq

これは機能しません。SQLコードが@sharedオブジェクトを理解できないためだと思います。しかし、これを行う方法は?

ノート:

私は使用してみました:

@subject = @shared.uniq.pluck(:subject).reject! { |s| s.empty? }

これにより正しいフィールドの配列が得られますが、options_from_collection_for_select では機能しません。

4

2 に答える 2

1

これを試して

@subject = Material.unscoped.select(:subject).where("subject IS NOT NULL and materials.subject != '' and status = 'shared'").uniq 
于 2013-07-29T12:28:06.497 に答える
1

shared次のように、クエリ のスコープを作成できます。

scope :shared, where(:status => 'shared')

そしてActiveRecord、好みに合わせてメソッドを チェーンできます。

@subject = Material.select(:subject).where("materials.subject IS NOT NULL 
  AND materials.subject != '' ").shared.uniq

スコープの詳細: http://guides.rubyonrails.org/active_record_querying.html#scopes

于 2013-07-29T12:28:33.847 に答える