我試圖沿着路徑在這篇文章中,我帶領下來繼續:render show page on submit backbone.js + rails + rails-backbone gem::加載ActiveModel :: MassAssignmentSecurity錯誤(Backbone.js的+軌+軌骨幹寶石)
我仍然在試圖找出我在該問題的第一段中描述了什麼。我在螢火蟲控制檯裏亂搞。當我點擊從根頁面提交一切正常工作(應用程序不會導航到新創建的對象顯示頁面)。網址更改爲http://localhost:3000/#/x
(其中x是新創建的對象的ID)。當我再次點擊提交時,我得到「500內部服務器錯誤22毫秒」。這個錯誤出現在控制檯>所有窗口中出現了小紅箭頭旁邊那(點擊時)落下的另一部分 - 在與我點擊「HTML」選項卡 - 和我得到這個錯誤:
ActiveModel::MassAssignmentSecurity::Error in UsersController#update
Can't mass-assign protected attributes: created_at, id, updated_at
我想我可能找到了這個錯誤的問題 - 我只是不知道該怎麼做來解決這個問題。我想是怎麼回事,是我有兩個不同的控制器(家庭控制器,以及用戶控制器) - 兩者的指數行爲的定義相同的事情,這是我的用戶控制指標的行動:
class UsersController < ApplicationController
# GET /users
# GET /users.json
def index
@users = User.all
respond_to do |format|
format.html # index.html.erb
format.json { render json: @users }
end
end
...
end
這裏是我的家控制器索引操作:
class HomeController < ApplicationController
def index
@users = User.all
end
end
因此,大家可以看到,我想是怎麼回事是,當我點擊提交第一次(從主頁)@users獲取設置和應用程序被導航到新用戶的展示頁面(雖然它不會再次 - 這一切都回到我的第一個問題 - 網址更改,但頁面的內容不,鏈接因爲我的第一個問題在上面)。
在URL更改爲顯示頁面url(不加載內容)後,我嘗試提交另一個具有唯一輸入的用戶窗體,並且出現上述的mass-assign錯誤。這似乎是因爲@users已由家庭控制器設置...所以當它再次從用戶控制器(第二次提交時)被調用時,它不能被分配。
我該如何解決這個問題?我需要家庭控制器和用戶控制器能夠使用@用戶...我想。並且,在這裏綁定一切回到我的第一個問題:render show page on submit backbone.js + rails + rails-backbone gem
我可以在家庭控制器中執行一些操作,將新創建的用戶重定向到顯示頁面(可能在創建,更新方法或用戶控制器中)家庭控制器的索引方法)?這可能解決了我從根頁面重定向到顯示頁面的問題嗎?所有相關的backbone.js(和我的根index.html.erb文件)代碼發佈在我的第一個問題中......請參考它,因爲它會填補你所有的骨幹細節,以及我真正想要的做。
謝謝!
UPDATE
這裏是我的用戶控制器更新操作(錯誤所在據稱來自):
def update
@user = User.find(params[:id])
respond_to do |format|
if @user.update_attributes(params[:user])
format.html { redirect_to @user, notice: 'User was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: "edit" }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
哎......胡安我很欣賞你的答案!你在最後一個問題上給出的答案幫助我理解了我做得更好一些......但是,當我單擊根頁面上的提交時,它沒有解決我沒有進入顯示頁面的問題...有任何想法嗎? – ewizard
我會在哪裏發送created_at和updated_at參數?他們不是在我的用戶模型中可訪問的屬性... – ewizard
即時將我的用戶控制器更新行動添加到我的文章...錯誤應該來自那裏。 – ewizard