2011-10-07 121 views
0

我已經爲dates_model寫了一個acts_as_api的代碼。代碼如下。它從不提取日期。我做錯了什麼?代碼如下所示rails:日期時間字段不取值

acts_as_api 

    api_accessible :bill_corrections do |inv| 
     inv.add :common_date, :as => :recieved_date, :if => lambda{|u|u.date_type_code=="RECVD"} 
     inv.add :common_date, :as => :actual_date, :if => lambda{|u|u.date_type_code=="ARRIV"} 
    end 

我有我的架構的DateField

create_table "item_dates", :force => true do |t| 
    t.integer "item_date_id", :limit => 10 
    t.string "date_type_code" 
    t.datetime "common_date" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    end 
+0

「提取」是指「加載」還是「返回」?你有沒有檢查你的條件是否真的實現了?您是否嘗試過返回其他字段以查看它是否返回任何內容? – polarblau

+0

@polarblau,我的意思是回報。除日期API外,所有其他字段都會返回。我在這裏粘貼的是acts_as_api回覆的一部分。我有其他約11個模型使用相同的acts_as_api響應。他們都得到了答覆。只有來自日期的api不會獲取結果。 –

回答

1

我acts_as_api的創造者。我用一個最小的Rails應用程序試用了你的用例,它爲我工作。下面是在XML實例響應:

<users type="array"> 
    <user> 
    <first-name>Me</first-name> 
    <recieved-date type="datetime">2011-10-07T08:20:02Z</recieved-date> 
    </user> 
    <user> 
    <first-name>Me2</first-name> 
    <actual-date type="datetime">2011-10-07T08:20:52Z</actual-date> 
    </user> 
</users> 

模型的API模板看起來是這樣的:

api_accessible :test_dates do |t| 
    t.add :first_name 
    t.add :common_date, :as => :recieved_date, :if => lambda{|u|u.date_type_code=="RECVD"} 
    t.add :common_date, :as => :actual_date, :if => lambda{|u|u.date_type_code=="ARRIV"} 
end 

這是User.all的轉儲:

[ 
    [0] #<User:0x0000010b859308> { 
        :id => 1, 
      :first_name => "Me", 
      :last_name => "Too", 
        :age => nil, 
       :active => nil, 
      :created_at => Fri, 07 Oct 2011 08:20:19 UTC +00:00, 
      :updated_at => Fri, 07 Oct 2011 08:20:19 UTC +00:00, 
     :date_type_code => "RECVD", 
      :common_date => Fri, 07 Oct 2011 08:20:02 UTC +00:00 
    }, 
    [1] #<User:0x0000010b858688> { 
        :id => 2, 
      :first_name => "Me2", 
      :last_name => "Too2", 
        :age => nil, 
       :active => nil, 
      :created_at => Fri, 07 Oct 2011 08:20:45 UTC +00:00, 
      :updated_at => Fri, 07 Oct 2011 08:20:53 UTC +00:00, 
     :date_type_code => "ARRIV", 
      :common_date => Fri, 07 Oct 2011 08:20:52 UTC +00:00 
    } 
] 

難道你檢查你是否正確使用了控制器助手?

def index 
    @users = User.all 

    respond_to do |format| 
    format.html # index.html.erb 
    format.xml { render_for_api :test_dates, :xml => @users, :root => :users } 
    format.json { render_for_api :test_dates, :json => @users, :root => :users } 
    end 
end 

我希望這會有所幫助。 :)

進一步的調試可能包括: *如果刪除:if選項會發生什麼情況? *如果你把它放在:if選項塊中,'puts u.date_type_code'是什麼意思?

+0

謝謝你克里斯看看我的問題。我是一個新手入門,所以不知道太多的調試選項。我試試這個。 –

+0

我驗證了,它是我的模型,它不會獲取任何日期時間字段。我該怎麼辦?有什麼配置,我需要控制......! –

+0

我假設你使用Rails 3與ActiveRecord(以及某種SQL DB) 你是什麼意思「我的模型沒有獲取任何日期時間字段」? 您能否啓動導軌控制檯並鍵入如下內容: ItemDate.first.attributes 您是否看到您需要的屬性? 您還可以查看日誌,以確保始終選擇所有必填字段(但SELECT *是Rails的默認值)。 –

相關問題