2013-04-21 20 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