2013-04-21 58 views
0

我试图传入一些实例变量来调用具有该特定对象属性的API。用户填写其创建报价对象的汽车详细信息(品牌,型号和年份)。这应该是传递到埃德蒙的API来检索该车的信息。代码工作正常,如果我将它设置为特定的品牌/型号/年份,但我无法将其返回给已创建商品对象的信息。将实例变量传递到rails中的API

这里是我的控制器:

def show 
@offer = Offer.find(params[:id]) 
@wanted_ad = WantedAd.find(params[:wanted_ad_id]) 
@make = @offer.ownermake 
@model = @offer.ownermodel 
@year = @offer.owneryear 

respond_to do |format| 
    format.html # show.html.erb 
    format.json { render json: @offer } 
end 
end 

这是我的模型:

class Offer < ActiveRecord::Base 
    attr_accessible :user_id, :wanted_ad_id, :estvalue, :image1, :offerprice, :ownercartype, :ownerdesc, :ownermake, :ownermileage, :ownermodel, :owneryear 
    belongs_to :user 
    belongs_to :wanted_ad 
    has_one :car 

    def self.carsearch 
     @car = [] 


     carinfo = HTTParty.get("http://api.edmunds.com/v1/api/vehicle/#{make}/#{model}/#{year}?api_key=qd4n48eua7r2e59hbdte5xd6&fmt=json") 
     carinfo["modelYearHolder"].each do |p| 
      c = Car.new 
      c.make = p["makeName"] 


      return carinfo 
    end 
    end 
end 

我的汽车模型很简单:

class Car < ActiveRecord::Base 
    attr_accessible :make, :model, :year 

    belongs_to :offer 
end 

而且我试图从调用它查看文件<%= Offer.carsearch %>。我可能各种各样的搞砸了,但这是我第一次使用API​​,我很迷茫。

+0

我的第一个问题是,为什么'carsearch'是Offer类中的类方法而不是实例方法?也就是说,为什么'def self.carsearch'而不是'def carsearch'? – 2013-04-21 21:55:00

+0

我已经尝试过两种都没有工作:\这是一个徒劳的尝试。 – jenno 2013-04-21 22:06:25

回答

0

我觉得你在carsearch方法有几个逻辑错误: 你取一个carinfo,遍历数组,实例化一个新的汽车,但没有与c对象,并在您退出第一次迭代结束时会发生整个函数返回检索carinfo ...

这可能是你的意思吗?

def carsearch 
    @cars = [] 

    # where do `make`, `model` and `year` come from here? 
    # probably method parameters!? 
    carinfo = HTTParty.get("http://api.edmunds.com/v1/api/vehicle/#{make}/#{model}/#{year}?api_key=qd4n48eua7r2e59hbdte5xd6&fmt=json") 
    carinfo["modelYearHolder"].each do |p| 
     c = Car.new 
     c.make = p["makeName"] 
     # initialize other attributes (year, model)? 
     @cars << c 
    end 


    return @cars 
end 
+0

我最终摆脱了方法,并将carinfo的东西放入控制器。它以这种方式工作。谢谢! – jenno 2013-04-21 23:40:32