1

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}

そしてさらに重要なことに、それは機能します。

4

0 に答える 0