新手问题 ActiveRecord 中的 find_by_sql,为什么不能传参数

string2020 · 2014年07月30日 · 最后由 Martin91 回复于 2014年07月30日 · 3861 次阅读

问题一: sa = Topic.find_by_sql("SELECT * FROM ts_topic where user_id = :a order by id",{:a => 100}) 这样,为什么不能传参数

sa = Topic.find_by_sql("SELECT * FROM ts_topic where user_id = ? order by id",100) 用问号的方式,也不行啊

问号和占位符,都不行啊

问题二:

select distinct r_type from reply where uid=3 Reply.select('r_type').distinct().where('uid = ?',3) 这样为什么不行

请问,如何解决

别猜了,别试了,请看文档

#1 楼 @hz_qiuyuanxin 文档里面是写死的参数,我想动态传入参数

#2 楼 @string2020 为什么用find_by_sqlwhere足够满足你的要求了

#4 楼 @Martin91 大部分是满足了,够用了。 但是,总有很复杂的,只能用 SQL

用 sql 也不是你这么用的,model 叫 Topic,select 的却是 ts_topic? 你新建个 model 叫 TsTopic,然后:

a = TsTopic.where("user_id = ?", 100).order("id")
Reply.select('distinct r_type').where('uid = ?', 3)

#5 楼 @string2020

Post.find_by_sql ["SELECT title FROM posts WHERE author = ? AND created > ?", author_id, start_date]
Post.find_by_sql ["SELECT body FROM comments WHERE author = :user_id OR approved_by = :user_id", { :user_id => user_id }]

参数是一个数组

#5 楼 @string2020 你原文中的用法应该是 3.1 之前的吧,看这个 http://apidock.com/rails/ActiveRecord/Base/find_by_sql/class

4.0 开始的用法就变成了数组,看这个 http://apidock.com/rails/ActiveRecord/Querying/find_by_sql

两者的 examples 差别就在于是不是总的作为一个数组传递,估计这就是关键了吧,你试试?

#2 楼 @string2020

别猜了,别试了,请看文档!

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