find思路方法执行个select from这样sql语句:all标记指定返回表中所有记录:first返回第条记录但是现在:first还不能保证你得到就是表中第条记录原因是什么?我们继续往下看
:conditions参数指定了SQL语句where部分可以包含Sql语句或者包含可以替换参数名字值上篇我们已经做了了解
daves_orders = Order.find(:all, :conditions => "name = 'Dave'")
name = params[:name]
other_orders = Order.find(:all, :conditions => ["name = ?", name])
yet_more = Order.find(:all,
:conditions => ["name = :name and pay_type = :pay_type",
params])
上面find思路方法并不能保证按照特定顺序返回记录除非指定查询排序(order by)部分:order参数就是用来指定SQL排序条件下面例子演示了查询名字为Dave订单并且按照pay_type,shipped_at字段进行降序排列
orders = Order.find(:all,
:conditions => "name = 'Dave'",
:order => "pay_type, shipped_at DESC")
我们还可以设置:limit参数来限制返回记录数如果你使用:limit参数或许还想指定排序条件下面例子返回10条记录并且按照指定条件排序:
orders = Order.find(:all,
:conditions => "name = 'Dave'",
:order => "pay_type, shipped_at DESC",
:limit => 10)
参数:off经常和:limit参数同出现用来指定从第条记录起返回指定偏移量下面代码演示了:off参数使用:
def Order.find_on_page(page_num, page_size)
find(:all,
:order => "id",
:limit => page_size,
:off => page_num*page_size)
end
从上面代码可以看到这样使用find场景就是分页显示数据用pagesize指定每页记录数然后由pagenum*page_size指定从第几条开始提取数据
参数:join用来指定主表和哪些表进行关联查询:join参数指定部分会插入到SQL中下面代码演示取得个所有名为“Programing Ruby”条目列表:
LineItem.find(:all,
:conditions => "pr.title = 'Programming Ruby'",
:joins => "as li inner join products as pr _disibledevent=> #{li.total_price}"
在find_by_sql思路方法中我们样可以使用占位符来给Sql语句传递参数例如:
Order.find_by_sql(["select * from orders where amount > ?",
params[:amount]])
最新评论