0

Railsアプリには、各ユーザーショービューでメモを作成できるユーザーがいます。

ショー ビューからメモを追加および編集できます。編集リンクは、各メモの編集パスに適切にルーティングされます。[保存] をクリックしてメモを更新すると、ユーザー ショー ビューに戻ります。

これが私のノートコントローラーです:

  def update
    @note = Note.find(params[:id])

    redirect_to user_path(@note.user)
  end

ただし、ノート エントリを更新しようとすると、何らかの理由で更新されていないことがコンソールに表示されます。BEGIN と COMMIT の間に UPDATE ステップがあるはずですが、ここでは欠落しているようです。

Started PUT "/notes/2" for 127.0.0.1 at 2013-02-01 01:50:25 -0800
Processing by NotesController#update as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"Wr+urG+6QvsbPuFpVGUEEqc8QVYiu5q8j389YmOi6Zg=", "note"=>{"author"=>"MZ", "note"=>"Test"}, "id"=>"2"}
  Note Load (0.2ms)  SELECT "notes".* FROM "notes" WHERE "notes"."id" = $1 LIMIT 1  [["id", "2"]]
   (0.2ms)  BEGIN
   (0.1ms)  COMMIT
  User Load (0.2ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
Redirected to http://localhost:3000/users/1
Completed 302 Found in 37ms (ActiveRecord: 3.8ms)

UPDATE ステップがない理由は何ですか?

4

2 に答える 2

2

属性を更新していません。更新するにupdate_attributesは、 を呼び出して渡す必要があります。params

def update
  @note = Note.find(params[:id])             #find the note
  if @note.update_attributes(params[:note])  #update the note
    redirect_to @note.user                   #if attributes updated redirect to @note.user
  else
    render :edit                             #if not, render the form
  end
end
于 2013-02-01T10:05:23.243 に答える
0

これを試してください。update_attributes がありません。これは update メソッドを呼び出す正しい方法です。更新が成功すると、フラッシュ メッセージが表示されます。

def update
    @note = Note.find(params[:id])

    respond_to do |format|
      if @note.update_attributes(params[:note]) # you need to make sure about the :note
        format.html { redirect_to user_path(@note.user), notice: 'Notes was successfully updated.' }
      else
        format.html { render actino: "edit" }
      end
    end
end
于 2013-02-01T10:10:24.920 に答える