TL;更新博士:这是一个缺失的 attr_accessible。
我刚开始使用backbone.js,我正在尝试将Ryan Bates 的抽奖器扩展为待办事项列表。
现在,我正试图在项目“完成”时保存它。为了确保它位于代码的工作分支中,我将@set 与我知道正在工作的@set 一起放入。
win: ->
@set(winner: true)
@set(completed: true)
@save()
“已完成”属性显示为 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
谢谢你的帮助!
更新:已解决
问题是我没有将“完成”设置为 attr_accessible。请注意,在以下 Put 语句中,虽然“已完成”返回 true,但“条目”哈希中只有“名称”和“获胜者”。
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}
将“完成”设置为 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}
更重要的是,它有效。