私はこの投稿で導かれた道に沿って続けようとしています: render show page on submit backbone.js + rails + rails-backbone gem
私はまだその質問の最初の段落で説明していることを理解しようとしています. 私はfirebugコンソールをいじっていました。ルート ページから [送信] をクリックすると、すべて正常に動作します (アプリが新しく作成されたオブジェクトの表示ページに移動しない場合を除く)。URL がhttp://localhost:3000/#/x
(x は新しく作成されたオブジェクトの ID です) に変わります。もう一度送信をクリックすると、「500 Internal Server Error 22ms」が表示されます。このエラーは、[コンソール] > [すべて] ウィンドウの横に小さな赤い矢印があり、(クリックすると) 別のセクションがドロップダウンします。[HTML] タブをクリックすると、次のエラーが表示されます。
ActiveModel::MassAssignmentSecurity::Error in UsersController#update
Can't mass-assign protected attributes: created_at, id, updated_at
このエラーの問題を突き止めた可能性があります。修正方法がわかりません。私が考えているのは、2 つの異なるコントローラー (ホーム コントローラーとユーザー コントローラー) があり、両方のインデックス アクションが同じものを定義しているということです。ユーザー コントローラーのインデックス アクションは次のとおりです。
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 が表示ページの URL に変更された後 (コンテンツをロードせずに)、別のユーザー フォームを一意の入力で送信しようとすると、上記の一括割り当てエラーが発生します。これは、 @users がすでにホームコントローラーによって設定されているためと思われます...そのため、ユーザーコントローラーから再度呼び出された場合 (2 回目の送信時) に割り当てることができません。
どうすればこれを修正できますか? @users を使用できるようにするには、ホームコントローラーとユーザーコントローラーの両方が必要です...と思います。そして、ここで私の最初の質問にすべてを結び付けます: render show page on submit backbone.js + rails + rails-backbone gem
新しく作成されたユーザーをショーページにリダイレクトするホームコントローラー内から何かを行うことはできますか (作成、更新メソッド、またはユーザーコントローラー/ホームコントローラーのインデックスメソッドで可能性があります)? これにより、ルート ページから表示ページへのリダイレクトに関する問題が解決する可能性がありますか? 関連するすべての backbone.js (および私のルートの index.html.erb ファイル) コードは最初の質問に掲載されています...バックボーンのすべての詳細と、私が本当にしようとしていることについて説明しますので、参照してください。行う。
ありがとう!
アップデート
ユーザーコントローラーの更新アクションは次のとおりです(エラーの原因と思われる場所):
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