新手问题 Rails check_box 的疑问

joezhang · 2014年01月21日 · 最后由 joezhang 回复于 2014年01月23日 · 2806 次阅读

Ruby2.0, Rails 4.0.1, MongoDB and Mongoid

Model:

class User include Mongoid::Document field :name, type: String field :delete, type: Boolean, :default =>false def self.delete_users where(delete: true) end end

new.html.erb

... <%= f.check_box :delete, :checked=>true %> ... 保存的结果是...,"delete":"1"...

如果改为 ... <%= f.check_box :delete, :checked=>true, true, false %> ... 保存的结果是...,"delete":"true"...

所以当查询 User.delete_users,没有返回值。请问有什么方法可以转换保存为(...,"delete":true...)? 在网上搜寻了一番也没找到解决办法,请大家指点一下。

自己想出个苯办法解决一下:

users_controller.rb

... case @user.delete when "1" @user.delete = true when "0" @user.delete = false end @user.save ... 这样可以转换保存为(...,"delete":true...)了,但是觉得很难看,Rails 没有什么内置的方法解决这样的简单问题吗?大家有什么好办法请分享一下,谢谢。

比较奇怪,默认应该就是转化为 true/false 的。

谢谢 Rei,我开始也是这么想的,可能是不是要在 MongoDB 中设置一下,一直找不到答案。

By default the boolean value is set by ActiveRecord db adapter. For PostgreSQL and MySQL, those common values will all converted to true/false: "1/0, y/n, Y/N, yes/no". I don't know how it works in MongoDB, maybe you need to check Mongoin.

I am sure MongoDB(and/or Mongoid) save "1"/"0" for the check_box, but cannot find an answer for now.

#5 楼 @joezhang Try direct assignment in console.

#6 @Rei I try the command below in console, same problem. The result message shows "=> true" but the DB record is "1" not true, wired!

u = User.first =># u.update(delete:"1") =>true User.first =>#

需要 登录 后方可回复, 如果你还没有账号请 注册新账号