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 では機能しません。