1

「entries_controller.rb」に次のコードがあります

 def update
     @entry = Entry.find(params[:id])
     puts "received HTTP request to update old entry:#{@entry.inspect} with"
     puts "new parameters: #{params}"
     if @entry.update_attributes(params[:entry])
       puts"Update was successful"
       @entry2 = Entry.find(params[:id])
       puts "Here is the new value #{@entry2.inspect}"
     end
  end

クライアントからサーバーにputリクエストを送信すると、コンソールに次のように表示されます。

  2013-02-17T20:12:25+00:00 app[web.1]: received HTTP request to update old 
  entry:#<Entry id: 1, created_at: "2013-02-17 19:17:40", updated_at: "2013-02-17 19:17:40", 
  description: "Test", title: "Home", category: "-1", latitude: "49.258061", longitude: "-123.153972", hasPhoto: false> with

  2013-02-17T20:12:25+00:00 app[web.1]: new parameters: {"description"=>"Test", "id"=>"1", "category"=>"-1", "hasPhoto"=>"0", "latitude"=>"49.258061", "longitude"=>"-123.153972", 
  "title"=>"Updated home", "action"=>"update", "controller"=>"entries", "format"=>"json"}

  2013-02-17T20:12:25+00:00 app[web.1]: Update was successful

  2013-02-17T20:12:25+00:00 app[web.1]: Here is the new value #<Entry id: 1, created_at: "2013-02-17 19:17:40", updated_at: "2013-02-17 19:17:40", description: "Test", 
  title: "Home", category: "-1", latitude: "49.258061", longitude: "-123.153972", hasPhoto: false>

ご覧のとおり、古いレコードは実際には更新されていません。if句がtrueと評価されたとしても。「title」の値が「Home」から「UpdatedHome」に変更されていないことを確認してください。

これのバグは何だろうか?更新されたとのことですが、実際には更新されませんでした。

誰かが私がこれを理解するのを手伝ってもらえますか?

ありがとう

4

1 に答える 1

2

何が起こっているのかというと、ビューファイル内でビューに適切なフォームを設定していないということです。あなたのパラメータはこのように戻ってきます

{"description"=>"Test", "id"=>"1", "category"=>"-1", "hasPhoto"=>"0", "latitude"=>"49.258061", "longitude"=>"-123.153972", 
  "title"=>"Updated home", "action"=>"update", "controller"=>"entries", "format"=>"json"}

実際には、彼らはこのように戻ってくるはずです...

{"entry" => {"description"=>"Test", "id"=>"1", "category"=>"-1", "hasPhoto"=>"0", "latitude"=>"49.258061", "longitude"=>"-123.153972", 
  "title"=>"Updated home"}, "action"=>"update", "controller"=>"entries", "format"=>"json"}

違いに気づきましたか?エントリに関するパラメータはまとめられ、属性エントリに添付されます。そうすれば、Railsはパラメータを確認するときに、新しく更新されたエントリのパラメータを認識します。フォームを見ずに、具体的に修正する方法を説明する方法はありませんが、ここから始めるのがよいでしょう。

于 2013-02-17T20:58:03.417 に答える