TL;UPDATE の DR: attr_accessible がありませんでした。
私は backbone.js から始めたばかりで、Ryan Bates のrafflerを todo リストに拡張しようとしています。
現在、アイテムが「完了」したときに保存しようとしています。コードの作業ブランチにあることを確認するために、@set を、動作していることがわかっている @set に入れました。
win: ->
@set(winner: true)
@set(completed: true)
@save()
「完了」属性は true として表示されますが、ページをリセットすると false に戻ります。「勝者」属性は true のままです。
これが私のビューコードです(.jst.echo形式):
<span class="entry">
<% if @entry.get('completed'): %>
<input class='is-done' type='checkbox' checked />
<% else: %>
<input class='is-done' type='checkbox' />
<% end %>
<%= @entry.get('name') %>
<%= @entry.score() %>
<% if @entry.get('winner'): %>
<span class="winner">WINNER</span>
<% end %>
</span>
これが私の Rails データベース スキーマです。
create_table "entries", :force => true do |t|
t.string "name"
t.boolean "winner"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.boolean "completed", :default => false
end
ご協力いただきありがとうございます!
更新:解決済み
問題は、「完了」を attr_accessible として設定していなかったことです。次の Put ステートメントでは、'completed' が true で返されますが、'entries' ハッシュには 'name' と 'winner' のみが含まれることに注意してください。
Started PUT "/api/entries/2" for 127.0.0.1
Processing by EntriesController#update as JSON
Parameters: {"entry"=>{"name"=>"There", "winner"=>true}, "completed"=>true, "created_at"=>"2012-04-16T18:04:41Z", "id"=>"2", "name"=>"There", "updated_at"=>"2012-04-16T18:13:04Z", "winner"=>true}
'completed' を attr_accessible に設定すると、次のようになります。
Started PUT "/api/entries/2" for 127.0.0.1
Processing by EntriesController#update as JSON
Parameters: {"entry"=>{"name"=>"There", "winner"=>true, **"complete"=>true**}, "completed"=>true, "created_at"=>"2012-04-16T18:04:41Z", "id"=>"2", "name"=>"There", "updated_at"=>"2012-04-16T18:13:04Z", "winner"=>true}
そしてさらに重要なことに、それは機能します。