1

私のデータベースには、 と という名前の 2 つの列がstart_dateあり、今日の日付が と の間にend_dateある場合、データベースからエントリを取得したいと考えています。現在のクエリ コードは次のとおりですが、期待どおりの結果が返されません。start_dateend_date

def updateMess
  @mess = MessType.find(params[:id_param])
  @today = Date.today
  @mess_current_price = MessPrice.where('mess_id = ? AND DATE(?) BETWEEN start_date AND end_date', @mess.mess_id, @today)

  respond_to do |format|
    format.json { render :json => { :_mess => @mess, :_mess_price => @mess_current_price } }
  end
end

上記のwhereコマンドは、次のクエリを生成します (コンソールに表示されます)。

MessPrice Load (0.4ms) SELECT mess_prices.* FROM mess_pricesWHERE (DATE('2013-07-01') BETWEEN start_date AND end_date)

17 ミリ秒で 200 OK を完了 (ビュー: 3.1 ミリ秒 | ActiveRecord: 2.7 ミリ秒)

編集: 以下は、解析された JSON データを使用してビューにフィールドを設定するために使用した JavaScript のコードですが、ビューにフィールドを設定していません:

$(document).on('click', ".mess-update-reveal", function(){
  $.post('/mess/updateMess',{id_param :$(this).attr('data-mess-id')}, function(data){
    var mess = data._mess;
    var messPrice = data._mess_price;
    console.log(data);
    $('#id_param_update_mess').val(mess.mess_id);
    $('#mess_name_update').val(mess.mess_name);
    $('#id_mess_charge_update').val(messPrice.id);
    $('#mess_breakfast_charge_update').val(messPrice.breakfast_charge);
    $('#mess_lunch_charge_update').val(messPrice.lunch_charge);
    $('#mess_dinner_charge_update').val(messPrice.dinner_charge);
    $('#mess_monthly_charge_update').val(messPrice.monthly_charge);
    $('#mess_semesterly_charge_update').val(messPrice.semesterly_charge);
    $('#mess_capacity_update').val(mess.mess_capacity);
    $('#start_date_update').val(messPrice.start_date);
    $('#end_date_update').val(messPrice.end_date);
    $('#rebate_update').val(messPrice.rebate);
  });
});

によって示される結果console.log(data)は次のとおりです。

Object
_mess: Object
created_at: "2013-06-26T07:16:58Z"
hostel_id: null
mess_capacity: 200
mess_id: 1
mess_name: "Mess1"
updated_at: "2013-06-29T12:08:08Z"
__proto__: Object
_mess_price: Array[1]
0: Object
breakfast_charge: 30
created_at: null
dinner_charge: 45
end_date: "2013-12-31"
id: 1
lunch_charge: 45
mess_id: 1
monthly_charge: 2000
rebate: 100
semesterly_charge: 11000
start_date: "2013-06-01"
updated_at: "2013-06-29T12:38:51Z"
__proto__: Object
length: 1
__proto__: Array[0]
__proto__: Object
4

4 に答える 4

0

以下の gem を使用して、日付間のレコードを見つけることができます。

この gem は非常に使いやすく、より明確ですBy starは、この gem と API をより明確に使用しており、ドキュメントもよく説明されています。

MessPrice.today #take all the 2 days records

ここでは、私たちのフィールドも通過できますMessPrice.by_month("January", field: :updated_at)

ドキュメントを参照して、試してみてください。

于 2015-02-05T13:07:06.723 に答える
0

これまたはこれを参照してください

MessPrice.where('start_date < ? AND end_date > ?', @today,  @today)

between句の構文は次のようなものです

SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;

どこで次のように使用していますか

SELECT column_name(s)
FROM table_name
WHERE value BETWEEN column_name1 AND column_name2;

それが期待どおりに機能しない理由かもしれません

于 2013-07-01T07:00:02.273 に答える
-2

基本的に、そのレコードが開始日と終了日の間に (たとえば) 販売可能である場合、そのレコードの Mess 価格レートをリストする必要があります。

この目的で find_by_sql を使用しましたが、さらに改善できます。

MessPrice.find_by_sql("SELECT * FROM mess_prices WHERE '#{Date.today}' BETWEEN start_date AND end_date")
于 2013-07-01T07:17:29.490 に答える