0

私は GuestOrder という名前のモデルを持っています:

class GuestOrder < ActiveRecord::Base
end

# == Schema Information
#
# Table name: guest_orders
#
#  id             :integer         not null, primary key
#  notes          :string(255)
#  adults         :integer
#  children       :integer
#  created        :datetime
#  placed         :datetime
#  billed         :datetime
#  user_id        :integer
#  guest_table_id :integer
#  take_away_id   :integer
#  created_at     :datetime
#  updated_at     :datetime

そしてコントローラー

class ApiController < ApplicationController
  def getOrdersByDate
    @guest_orders = GuestOrder.where(:created_at => (params[:created]))
    render json: @guest_orders
  end
end

routes.rb

  match '/api/getOrdersByDate'

これをURLで取得しようとすると

http://localhost:3000/api/getOrdersByDate?:created=2012-4-5

日付に制限されていないすべてのレコードを取得しました

私が得たサーバーでselect * from guest_orders

Started GET "/api/getOrdersByDate?:created=2012-4-5" for 127.0.0.1 at 2012-04-06 13:19:59 +0530
  Processing by ApiController#getOrdersByDate as HTML
  Parameters: {":created"=>"2012-4-5"}
  GuestOrder Load (26.3ms)  SELECT "guest_orders".* FROM "guest_orders"
Completed 200 OK in 47ms (Views: 1.5ms | ActiveRecord: 26.3ms)


Started GET "/api/getOrdersByDate?:created=2012-4-5" for 127.0.0.1 at 2012-04-06 13:21:21 +0530
  Processing by ApiController#getOrdersByDate as HTML
  Parameters: {":created"=>"2012-4-5"}
  GuestOrder Load (1.7ms)  SELECT "guest_orders".* FROM "guest_orders"
Completed 200 OK in 47ms (Views: 1.4ms | ActiveRecord: 1.7ms)

私のDBのレコードには日付のレコードがあります2012-03-22, 2012-04-05, 2012-04-06

getOrdersByDate特定の日付のレコードを取得するためにクエリを実行するにはどうすればよいですか。

4

2 に答える 2

2

リクエストにコロンは必要ありませんHashWithIndifferentAccess。シンボリック ルックアップが行われます。

http://localhost:3000/api/getOrdersByDate?created=2012-4-5

ただし、 a を where 条件に渡すとnil次のクエリが発生するため、この問題は興味深いものに見えます。

SELECT "guest_orders".* FROM "guest_orders" WHERE "created_at" IS NULL

あなたの場合、SQL WHERE 条件全体が欠落しています。

更新 #1

リロードが必要なようです。

日付のレコードを取得するには、次のメソッドを使用できます。

time = Time.zone.parse(params[:created])
range = time.beginning_of_day..time.end_of_day
@guest_orders = GuestOrder.where(:created_at => range)

アップデート #2

開始日と終了日がある場合:

t_start = Time.zone.parse(params[:start])
t_end = Time.zone.parse(params[:end])
range = t_start.beginning_of_day..t_end.end_of_day
@guest_orders = GuestOrder.where(:created_at => range)
于 2012-04-06T08:05:58.673 に答える
-1

このクエリを使用して、日付でレコードを取得できます

    @results = GuestOrder.where("created_at = ? ", params[:created])

それを試してみてください

于 2012-04-06T08:07:40.047 に答える