2015-10-18 64 views
2

我有以下問題PATCH使用錯誤的模型ID

screenshot

我的編輯功能節省id爲33的編號32的模型對象,我不知道爲什麼。 這裏是我的控制器功能:

def update 
    @user = User.find_by_id(session[:user_id]) 
    @user.ranks[0].update(user_params) 
    redirect_to dashboard_ranks_path 
end 

private 
def user_params 
    params.require(:rank).permit(:points, :rank_name, :id) 
end 

同樣的方法在另一臺控制器上,但在這一個突然犯規出於某種原因的工作。例如我有3篇文章,我編輯了第一篇文章,它不會更改編號,它會自動成功編輯。但是,如果我選擇第二個,它會選擇第三個ID,如果我編輯第三個,它會以某種方式修補第一個。有沒有人有過這樣的錯誤?

回答

2

您是否有多個服務器運行您的應用程序?你在使用數據庫/ redis支持的會話存儲嗎? 特別是,你得到排名的方式似乎是用戶關聯的問題。理想情況下,你會做這樣的事情

rank = @user.ranks.find_by_id params[:rank][:id] 
rank.update(user_params) if rank 

的問題不相關,但我建議改變user_params的名字,rank_update_params什麼的,它代表了他們的東西。

編輯

兩個第一個問題是有關要知道,如果擁有您正在編輯的級別用戶要從會話訪問相同。

+0

謝謝:)我剛剛更改了@ user.ranks.update(user_params)到'@ user.ranks.find_by_id(params [:id])。update(user_params)'並修復了它,謝謝。 – Splinti

+0

你不應該使用'find_by_id',除非你不使用Rails 4 –

+0

我正在運行Rails 4,我只注意到 – Splinti

1

你,因爲你不使用排序id變量得到的錯誤...

@user = User.find_by_id session[:user_id] 
@user.ranks[0].update user_params #-> how do you know which rank is first? 
redirect_to dashboard_ranks_path 

你會得到更好的執行以下操作:

@user = User.find session[:user_id] #-> find uses id anyway, and even then "find_by :attribute" is the `Rails 4` way of doing it 
@rank = @user.ranks.find params[:id] 
@rank.update user_params 

這將選擇rank基於您已經通過您的路線的變量params[:id]變量:

/ranks/edit/33