0

この質問への答えは簡単なはずですが、アクティブ レコード クエリ ガイド、SO に関するその他の質問、または Rails コンソールをいじっても見つかりませんでした。

アクティブ レコード クエリ インターフェイスを介してデータベースにクエリを実行し、最初または最後のエントリの 1 つの列の値を返したいだけです。テーブル全体をトラバースする必要はありません (すぐに説明します)。

pluck を使用してこれを行う方法がありますが、クエリ メッセージの構造は次のとおりです。

    initial = Message.where("id = ?", some_id).pluck(:value).first
    final   = Message.where("id = ?", some_id).pluck(:value).last

残念ながら、これは非常に非効率的な操作であり、最初または最後のエントリだけを返す前に、指定valueされた に一致するすべてのレコードから属性を抽出します。id基本的に、ステートメントを次のように並べ替えたいと思います。

    initial = Message.where("id = ?", some_id).first.pluck(:value)
    final   = Message.where("id = ?", some_id).last.pluck(:value)

pluckただし、メッセージのメソッドがないことを説明する NoMethodError が表示されます。私はこれをさまざまな方法でやろうとしました:

    initial = Message.where("id = ?", some_id).first(:value)
    initial = Message.where("id = ?", some_id).first.select(:value)
    ...

しかし、すべてが何らかのエラーを返します。私は知っている

おっと
、どういうわけか私の質問の一部が途切れました(最後に私が持っていた答えを含む)-それを見つけることができるかどうかを確認しますが、select()メソッドを使用して調査しました.selectはクエリを意味する1つの引数しかとらないことがわかりましたstring は のようなオプションの引数を取ることができないため、構築する必要がありますが、(取得しようとしている列属性はどこにありますか)id = ?, some_idを追加するだけで機能することがわかったので、以下の回答に示すようにメソッドに切り替えました。.valuevaluewhere

4

1 に答える 1

2

答えは質問にありますが、次のようなことをしようとしている場合:

    initial = Message.where("id = ?", some_id).pluck(:value).first
    final   = Message.where("id = ?", some_id).pluck(:value).last

これを次のように変更します (列名を参照するだけです。この例では ですが、または何かvalueである可能性があります)。amount

    initial = Message.where("id = ?", some_id).first.value
    final   = Message.where("id = ?", some_id).last.value
于 2013-02-14T18:12:11.857 に答える