0

ProgramフィールドcalleのあるテーブルがありますSymbol

Symbolに値を持つすべてのプログラムを取得したいと思います。空の文字列ではなく、nilでもないことを意味します。

ActiveRecordを使用してそのようなクエリを作成するにはどうすればよいですか?

これが私のコードです:

<div class="control-group">
  <%= f.label :program %>
  <div class="controls">
    <%= f.select :program_id, Program.where(:symbol.exists => true).collect {|c| [c.name + " " + c.symbol, c.id]}, {}, :class => 'chzn-select' %>
  </div>
</div>

このエラーメッセージが表示されます:

:symbol:Symbolの未定義のメソッドが「存在する」

助言がありますか?

4

3 に答える 3

0

以下の構文を使用する代わりに:

Program.where(:symbol.exists => true)

以下の構文を使用して、symbolがnilではないレコードを検索します。

Program.where("symbol is not null")
于 2013-02-27T13:39:50.147 に答える
0

あなたの状態は次のようなものでなければなりません

Program.where("symbol IS NOT NULL AND symbol != ''")
于 2013-02-27T13:39:58.660 に答える
0

簡単に言うと、ファインダーメソッドのシンボルでメソッドを直接呼び出すことはできません。構文のため、現在、Symbolクラスのシンボルの#existメソッドを呼び出しています。:symbol

ActiveRecordクエリのメモリは少し悪いですが、いつでも次のような単純な文字列条件を設定できます

@programs = Program.where("symbol <> ''")

これは、シンボルがnullでも、空の文字列でもないことを示しています。

(これはコントローラーに組み込まれ、ビュー内のコントローラーインスタンス変数@programsを選択した入力に使用できるようになります。)

于 2013-02-27T13:40:32.817 に答える