2013-07-01 44 views
1

在我的數據庫中有兩個日期和顯示之間我有一個名爲start_dateend_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負載(0.4ms)選擇mess_prices * FROM mess_prices WHERE(DATE( '2013-07-01')之間的起始日期日期和結束日期)

完成200 OK在17MS。(瀏覽次數:3.1毫秒| ActiveRecord的:2.7毫秒)

編輯:以下是表示用於我的javascript我用於通過使用解析的JSON數據來設定在我的視場的代碼,但它不設置在我的視場:

$(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 
+0

您是否嘗試直接查詢查詢?只是爲了檢查數據格式是否如預期的那樣 – AnkitG

+0

@AnkitG是數據格式與我寫的相同 – hiteshtr

+0

您使用的是哪個數據庫? – Mischa

回答

5

data._mess_price是一個數組,所以你要麼必須在數組中返回的第一個元素:

var messPrice = data._mess_price[0]; 

或者確保data._mess_price不是在您的ActiveRecord調用結束時使用first的陣列:

@mess_current_price = MessPrice.where('mess_id = ? AND DATE(?) BETWEEN start_date AND end_date', @mess.mess_id, @today).first 

您使用的方式BETWEEN沒有任何問題。查詢工作正常。

0

thisthis

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

語法between clause是類似以下

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; 

可以是原因如你預期它不工作

+0

這是另一種做法它,但它不能解釋爲什麼'DATE(?)之間的start_date和end_date'沒有給出預期的結果。 – Mischa

+0

不,反過來應該也可以。我剛剛嘗試過'日期(?)之間的start_date和end_date'我自己,它工作正常。 – Mischa

+0

@Mischa: - 你能提供任何證明這一點的參考鏈接,以便它可以幫助每個人? – Salil

-1

基本上要如果該記錄可用於(說)在開始日期和結束日期之間的銷售,則列出該記錄的亂價格費率。

我已經使用的find_by_sql爲了這個目的,你可以進一步改進:

MessPrice.find_by_sql("SELECT * FROM mess_prices WHERE '#{Date.today}' BETWEEN start_date AND end_date") 
+0

您可以動機爲什麼必須使用'find_by_sql'來代替正常的'where'? – Mischa

0

你可以使用下面的寶石來查找日期之間的記錄,

這種寶石很容易使用和By star現在用的這個創業板和API更加清晰和文檔也很好的解釋更加清晰。

MessPrice.today #take all the 2 days records 

在這裏,您可以通過我們的現場也MessPrice.by_month("January", field: :updated_at)

請參閱文檔和嘗試。

相關問題