2011-11-18 85 views
0

我是Rails和Android的新手,所以如果問題在某個地方回答之前請不要責怪我,但在搜索答案之後我找不到任何東西。Rails Activerecord:在HTTP POST方法之後創建或更新

問題:如何確保Rails創建或更新字段IP,該字段在數據庫中也應該是唯一的。我從Android設備發送HTTP POST到「http://192.168.5.3:3000/users/create?user[user_ip]="+myIp+"user[user_name]="+name

因此,在Rails的」服務器端,Rails應該檢查myIp是否已經存在,如果是的話,它應該將「user_name」更新爲「name」,如果它找不到myIp,它應該創建一個包含兩個字段的新記錄。

我應該在user.rb模型中使用before_create嗎?或者我該怎麼做?我應該使用POST還是PUT?如果我應該使用PUT,那麼如果用戶存在,我不知道該ID。

或者不應該使用Rails動作「創建」,並寫一個自定義的Webservice方法?

對不起,這可能是跛腳的問題,但不知何故我無法弄清楚!

感謝您的幫助!

回答

0

您希望使用PUT進行更新,並使用POST進行創建。如果您知道用戶存在,但你沒有ID,你可以使用一個PUT請求,並在更新方法,你有這樣的事情:

def update 
    @user = User.find_by_ip(params[:ip]) 
    if @user.update_attributes(...) 
    #success 
    else 
    #failure 
    end 
end 

再次,理想的方法是將id傳入更新中,但如果您無法做到這一點,則不希望犧牲RESTful約定。

+0

謝謝!但是我應該從android調用什麼URL作爲HTTP PUT http://192.168.5.3:3000/users/update?user[ip]="+myIp+"user[user_name]="+name?(這裏:id會丟失因爲rake路由說PUT/users /:id)或者我應該添加一個新的路由,以便該ID不需要HTTP PUT? – user1054134

+0

我希望Rails在數據庫中查找IP,如果它找到IP應該使用名稱字符串進行更新,如果不是,它應該創建一個IP和名稱的新記錄,所以PUT會強制我在路由中傳遞一個id,我該怎麼辦? – user1054134

+0

好吧,我想我已經得到了你。通過任何像42一樣的ID--無視爲了忽略錯誤。所以http://192.168.5.3:3000/users/42?user[ip]="+myIp +「&user [name] =」+ name。它現在有效,但更新方法中的一個問題,爲什麼我不能說(at)user = User.find_by_ip(params [:ip]),它每次都會拋出一個零對象。我必須創建一個新用戶來訪問ip字段(at)u = User.new(params [:user]),然後(at)user = User.find_by_ip(@ u.ip)。爲什麼我不能通過params [:ip]直接訪問IP? – user1054134