TL;更新的DR:缺少attr_accessible。
我刚开始使用backbone.js,我正在尝试将Ryan Bates的raffler扩展为待办事项列表。
现在,我正试图在项目“完成”时将其保存。为了确保它在代码的工作分支中,我将@set置于我知道正在工作的@set中。
win: ->
@set(winner: true)
@set(completed: true)
@save()
'completed'属性显示为true,但在重置页面时返回false。 “胜利者”属性保持不变。
这是我的视图代码(.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
感谢您的帮助!
更新:已解决
问题在于我没有将'completed'设置为attr_accessible。请注意以下Put语句中,当'completed'返回true时,只有'name'和'winner'位于'entries'哈希中。
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}
更重要的是,它有效。