rails:如果当前日期在两个日期之间并在视图中显示,则选择记录

hit*_*htr 1 activerecord ruby-on-rails ruby-on-rails-3

在我的数据库中,我有两列名为start_dateand end_date,如果今天的日期介于start_date和之间,我希望从我的数据库中获取条目end_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
Run Code Online (Sandbox Code Playgroud)

上面的where命令生成以下查询(如控制台中所示):

MessPrice加载(0.4ms)SELECT mess_prices.*FROM mess_pricesWHERE(日期('2013-07-01')BETWEEN start_date和end_date)

在17ms完成200 OK(浏览次数:3.1ms | ActiveRecord:2.7ms)

编辑:以下是我的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);
  });
});
Run Code Online (Sandbox Code Playgroud)

结果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
Run Code Online (Sandbox Code Playgroud)

Mis*_*cha 5

data._mess_price 是一个数组,所以你要么必须返回数组中的第一个元素:

var messPrice = data._mess_price[0];
Run Code Online (Sandbox Code Playgroud)

或者data._mess_price通过first在ActiveRecord调用结束时使用来确保它不是数组:

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

你使用的方式没有错BETWEEN.查询工作正常.