将非静态自定义方法添加到Active Resource类的正确方法

时间:2011-11-16 22:19:00

标签: ruby-on-rails ruby activeresource

我的路线看起来像这样:

/orders/preview

它返回类似:

<order><total>100</total></order>

我想将此方法添加到活动资源类中。这样做的最佳方式是什么?

我开始做这样的事情:

class Order < ActiveResource::Base
  def self.preview(params = {})
    post(:preview, params)
  end
end

这似乎有效,但我得到Net::HTTP回复而不是Order对象。我做错了什么?

2 个答案:

答案 0 :(得分:0)

我不确定POST,但是如果你只想做GET。你试过这个吗?

http://api.rubyonrails.org/v3.2.1/classes/ActiveResource/Base.html#method-c-find

Order.find(:all, :from => :preview)
# => GET /orders/preview.json

答案 1 :(得分:0)

我遇到了处理不同格式的类似问题...我已经通过明确说明我想要使用的格式来解决这个问题:

在ActiveResource模型中,设置self.format参数

class Order < ActiveResource::Base
    self.site = "http://lbv.me"
    self.format = :json  
end

在ActiveRecord模型中,如果您使用&#39; respond_with&#39;实际上你必须说明你期望它回应的格式,例如:

class UsersController < ApplicationController
respond_to :html, :json

def show
   @user = User.find(params[:id])
   respond_with @user
end
.
.
.
end