2012-08-06 38 views
0

我有一個Rails應用程序,其中的用戶參數都是通過帶有JSON參數的RESTful API提供的。具體來說,沒有用戶發佈數據的客戶端HTML表單:它是原始的JSON。我如何區分用戶參數和Action Pack參數?

所以要創建一個新的汽車入口,用戶可以:

POST www.mysite.com/api/car 
model=Ford&year=2012 

在我的應用程序,通過我收到這封信的時候,該行動寶盒值與用戶價值的PARAMS []哈希間雜,所以我得到:

params = {:model=>"Ford", :year=>"2012", :format=>"json", :action=>"create", :controller=>"api/cars"} 

將用戶生成的參數與Action Pack生成的參數分開的最佳方法是什麼?我能想到的最好的辦法就是刪除後者:

car_params = params.reject {|k,v| [:format, :action, :controller].member?(k)} 
car = car.new(car_params) 

但是這並不是正確的。有沒有更好的辦法? (例如,我是否可以獲得Action Pack來將用戶提供的參數封裝爲單個散列並將其作爲params []的單個元素傳遞?)

回答

0

不知道它是否可以提供幫助,但我只是在application_controller創建一個方法:

def user_params 
    return params.reject {|k,v| [:format, :action, :controller].member?(k)} 
end 

所以整個代碼,你可以只使用user_params當你不想ActionPack的PARAMS

+0

呀,我把一個像我application_helper.rb文件的功能。我希望有一些竅門可以讓它完全不需要它! – 2012-08-07 16:09:55

+0

由於這是Rails:'params.exclude(:format,:action,:controller)'方式更加簡潔。 – 2012-08-07 23:41:36

+0

當我嘗試更簡潔的'params.exclude(:format,:action,:controller)'我得到'未定義的方法'exclude'「 – samjewell 2016-07-13 16:59:55