rubyonrails:Ruby on rails开发从头来( 4十 7)- ActiveRecord基础(强大的find思路方法)

  现在我们知道如何指定条件现在我们来看看find思路方法支持些其他设置   首先理解find(:first,…)思路方法是非常重要该思路方法在同样conditions设置下和find(:all,…)思路方法生成同样sql语句区别的处仅在于只返回条记录时候参数为:first种为:all

  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]])


Tags:  rubyonrails安装 rubyforrails rubyrails rubyonrails

延伸阅读

最新评论

发表评论