Rails Squeel 0.9.5 的查詢問題請教大家

idarfan · 2012年04月18日 · 最后由 idarfan 回复于 2012年04月18日 · 2338 次阅读

各位好啊

近日在研究怎麼把 Squeel 0.9.5 怎麼來配合我要做的 search from. 按著說明一個個來測試 測到底下的指令就卡住了

我是先在 rails console 底下測。其中有個性別的欄位。它死活就是不讓我過 好生納悶,有誰也有在用 Squeel 幫忙看看 謝謝 Loading development environment (Rails 3.0.7) ruby-1.9.2-p290 :001 > Student.where{(cname =~ '陳%') & (gender > M) | (cname =~ '陳%') & (gender > F)} NameError: uninitialized constant M from (irb):1:in block in irb_binding' from /home/kojendirect/.rvm/gems/ruby-1.9.2-p290/gems/squeel-0.9.5/lib/squeel/dsl.rb:31:ininstance_eval' from /home/kojendirect/.rvm/gems/ruby-1.9.2-p290/gems/squeel-0.9.5/lib/squeel/dsl.rb:31:in eval' from /home/kojendirect/.rvm/gems/ruby-1.9.2-p290/gems/squeel-0.9.5/lib/squeel/adapters/active_record/3.0/relation_extensions.rb:219:inwhere' from /home/kojendirect/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.0.7/lib/active_record/base.rb:442:in where' from (irb):1 from /home/kojendirect/.rvm/gems/ruby-1.9.2-p290/gems/railties-3.0.7/lib/rails/commands/console.rb:44:instart' from /home/kojendirect/.rvm/gems/ruby-1.9.2-p290/gems/railties-3.0.7/lib/rails/commands/console.rb:8:in start' from /home/kojendirect/.rvm/gems/ruby-1.9.2-p290/gems/railties-3.0.7/lib/rails/commands.rb:23:in' from script/rails:6:in require' from script/rails:6:in

'

NameError: uninitialized constant M

你這個錯和 squeel 沒關系 gender > M, gender > F M 和 F 是什麽,如果是某个 model 的常量,应该写成 model::M 和 model::F

這是把它改成 gender = F , gender 是性別欄位。欄位型態是 varchar 裏面的值不是 M 就是 F ,不管怎麼改但是還是一樣報錯 ruby-1.9.2-p290 :003 > Student.where{(cname =~ '陳%') & (gender eq M) | (cname =~ '陳%') & (gender eq F)} NameError: uninitialized constant M 或改成像底下,也是一樣報錯 Student.where{(cname =~ '陳%') & (gender = M) | (cname =~ '陳%') & (gender = F)} NameError: uninitialized constant M

试试这样 Student.where{(cname =~ '陳%') & (gender == 'M') | (cname =~ '陳%') & (gender == 'F')}

另外,既然 gender 不是 F 就是 M,这个查询根本不需要 gender 这个条件啊,直接 Student.where{cname =~ '陳%'}

感謝您的關注與指教,居然起死回生了 Orz 噴了滿畫面的資料..可否再請教如何把噴出來的資料提取只要人名跟電子郵件的部份?

假设你的人名和电子邮件是 cname 和 email

Student.select('cname, email').where{cname =~ '陳%'}

嗯?兩個句子能併在一起用嗎?像是子查詢那樣 例如我只要姓陳的所有男學生的姓名及電子郵件

你自己 console 里试试不就知道了

Student.select('cname, email').where{(cname =~ '陳%') & (gender == 'M')}

Student.select('id, student_id, cname, email').where{(cname =~ '陳%') & (gender == 'M')} 嗯。剛才以為還有什麼特別要注意的怎麼我串起來不能用....結果是我的 rails console 當掉(很奇怪好像常常這樣),我關掉重開之後再試... 就可以了 再次感謝您的協助

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