`
fantaxy025025
  • 浏览: 1328655 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

Rails_ActiveRecord_find方法_拾疑_整理_搜集

 
阅读更多

简而言之:拼sql语句的方法和细节。

public class method find(*args) in ActiveRecord::Base::self in active_record/base.rb

另外可以看看这个帖子http://www.iteye.com/topic/135499的回复中提到的插件:criteria_query,看着好用:

http://agilewebdevelopment.com/plugins/criteria_query 

 

 

 

 

#joins

:joins -

#1 Either an SQL fragment for additional joins like "LEFT JOIN comments ON comments.post_id = id" (rarely needed),

这样的话,joins后面的string字符串会完全跟在select * from model_xxx #{joins 字符串} where ... ... 

这样的话,如果写别名的话,根据拼sql规则,需要下面这样写,在joins处先写别名:

Deal.all(:limit => 1, :joins=>"as d join areas as s on d.city_id = s.id ", :select => "d.*, s.* ", :conditions => ["s.id < 10 and d.id < 100"])

 

#2 named associations in the same form used for the :include option, which will perform an INNER JOIN on the associated table(s),

等价于include的用法,也就是说,这样的关联用法,必须是在model中声明了的关联,如belongs_to xxx || include yyy

 

#3 or an array containing a mixture of both strings and named associations.

等价于#2,只不过有多个关联时,用数组就可以了

 

#4 注意=>If the value is a string, then the records will be returned read-only since they will have attributes that do not correspond to the table's columns. Pass :readonly => false to override.

 

#5 和include的区别

看看同样的表结构下的例子,更详细的还是要去看源码或实验:

Deal.all(:limit => 1, :joins=>:concern_deal, :conditions => ["deal_id < 10 and concern_deals.user_id < 1000"])

SELECT `deals`.* FROM `deals` INNER JOIN `concern_deals` ON concern_deals.deal_id = deals.id WHERE (deal_id < 10 and concern_deals.user_id < 1000) LIMIT 1

 

Deal.all(:limit => 1, :include=>:concern_deal, :conditions => ["deal_id < 10 and concern_deals.user_id < 1000"])

SELECT DISTINCT `deals`.id FROM `deals` LEFT OUTER JOIN `concern_deals` ON concern_deals.deal_id = deals.id WHERE (deal_id < 10 and concern_deals.user_id < 1000) LIMIT 1

 

#from

:from - By default, this is the table name of the class, but can be changed to an alternate table name (or even the name of a database view)

也就是说,可以像hibernate那样,model不一定对应表。

这个用find_by_sql也可以实现,只不过这种用法更好看一些~

例子:

 

>> ShopClean.first(:select => "id, shop_name, city_id")

=> #<ShopClean id: 1, shop_name: "上海正善食品有限公司", city_id: 0>

 

>> ShopClean.first(:select => "id, shop_name, city_id", :from => "shops")

=> #<ShopClean id: 1, shop_name: "品尚豆捞 ", city_id: 1>

>> ShopClean.find_by_sql("SELECT id, shop_name, city_id FROM shops LIMIT 1")
=> [#<ShopClean id: 1, shop_name: "品尚豆捞 ", city_id: 1>]

 

#select

:select - By default, this is "*" as in "SELECT * FROM", but can be changed if you, for example, want to do a join but not include the joined columns. Takes a string with the SELECT SQL fragment (e.g. "id, name").

这中用法的拼sql方法就是替换掉默认的SELECT * FROM,所以从拼sql的角度来看,可以在里面写count等语句

例如:

 

?> sp = ShopClean.first(:select => "city_id, count(*) cnt", :conditions => ["city_id = 1"], :group => "city_id")

=> #<ShopClean city_id: 1>

>> sp.city_id

=> 1

>> sp.cnt

=> "2584"


#conditions

:conditions - An SQL fragment like "administrator = 1", [ "user_name = ?", username ], or ["user_name = :user_name", { :user_name => user_name }]. See conditions in the intro.

说白了就是拼where语句

注意可以使用hibernate类似的占位符,可以防止sql注入吧~

["user_name = :user_name", { :user_name => user_name }

 

 

Y

Y

Y

=

Y

Y

Y


分享到:
评论

相关推荐

    rails_activerecord_lite

    Rails/ActiveRecord 精简版 ![预览] [预览]: ./docs/preview.png 描述 Rails/ActiveRecord Lite 是流行的 Ruby on Rails 框架的精简版。 这个应用程序的目的是更深入地了解 Rails 和 ActiveRecord 的工作原理,特别...

    inspinia admin - v2.5 Rails_Full_Version

    3. **ActiveRecord**:Rails中的ORM(对象关系映射)工具,用于处理数据库操作。你需要熟悉数据库模型的创建、查询和关联。 4. **Scaffolding**:Rails提供的一种快速生成CRUD(创建、读取、更新、删除)操作的工具...

    weixin_rails_middleware, 微信集成 ruby weixin_rails_middleware for integration weixin..zip

    `weixin_rails_middleware` 是一个开源的 Ruby 框架中间件,设计用于帮助开发者轻松地在 Rails 应用程序中集成微信服务。这个中间件提供了与微信API交互的功能,包括验证微信服务器的请求、处理用户消息、以及发送...

    rails_semantic_logger, Rails 语义记录器用语义记录器替换 Rails 缺省记录器.zip

    rails_semantic_logger, Rails 语义记录器用语义记录器替换 Rails 缺省记录器 Rails 语义记录器 语义记录器用语义记录器替代 Rails 缺省记录器。http://github.com/rocketjob/rails_semantic_logger文档有关完整文档...

    rails_apps_composer, 一个 gem,为 Rails 启动应用程序创建 Rails 应用程序模板.zip

    rails_apps_composer, 一个 gem,为 Rails 启动应用程序创建 Rails 应用程序模板 Rails 应用编辑器 Rails 应用程序编辑器 gem 安装一个 命令行 工具来从"食谱"的Collection 组装 Rails 应用程序。"你可以使用 rails_...

    InspiniaAdmin 2.6.1 Rails_Full_Version

    Rails的ActiveRecord ORM(对象关系映射)允许开发者以更面向对象的方式操作数据库,而路由系统则使得URL管理变得直观和灵活。 InspiniaAdmin 2.6.1 版本中的亮点包括: 1. **用户认证与授权**:内置了用户注册、...

    agile_web_development_with_rails_3rd_edition.9994652073.pdf

    《敏捷Web开发与Rails》第三版是一本深入探讨Ruby on Rails框架在敏捷软件开发方法论下的应用指南。本书由多位知名作者共同编写,包括Sam Ruby、Dave Thomas、David Heinemeier Hansson等,他们都是在Ruby社区内享有...

    ActiveRecord简单实例_activerecord.zip

    在Ruby on Rails框架中,ActiveRecord是一个至关重要的组件,它负责模型(Model)与数据库之间的交互。本实例将深入探讨ActiveRecord的基本用法,帮助理解如何在实际开发中有效地运用这个强大的工具。 首先,让我们...

    bhl_rails_solr-源码.rar

    《深入解析bhl_rails_solr源码》 在当今的Web开发领域,Rails框架以其高效、简洁的设计理念,深受开发者喜爱。同时,Solr作为一款强大的全文搜索引擎,被广泛应用于各类复杂的数据检索场景。当这两者结合时,便诞生...

    rails_admin_content_builder:使用rails_admin创建内容的简单方法

    使用创建内容的简单方法。 预习 示范 要求 依存关系 MiniMagick 支持的ORM ActiveRecord 支持的资产插件 CarrierWave 安装 使用rails &lt;5和TurboLink &lt;5进行测试 将此行添加到您的应用程序的Gemfile中: ...

    rails_best_practices:Rails项目的代码度量工具

    rails_best_practices rails_best_practices是用于检查Rails代码质量的代码度量工具。 它支持以下ORM / ODM: 活动记录 蒙古型 mongomapper 以及以下模板引擎: erb 哈姆 减肥 拉布尔 rails_best_practices...

    rails_admin_acts_as_list:rails_admin插件以对记录进行排序

    介绍插件,用于对记录进行排序(使用 gem)安装要启用rails_admin_acts_as_list,请将以下内容添加到您的Gemfile : gem 'rails_admin_acts_as_list'gem 'rails_admin' 重要提示: rails_admin_acts_as_list之前必须...

    RestFul_Rails_Dev_pdf_v_0.1.zip

    此外,Rails的ActiveRecord模型提供了强大的关联(Associations)功能,如has_many、belongs_to等,这在构建复杂的RESTful API时非常有用。通过关联,可以方便地处理资源之间的关系,比如用户拥有多个博客文章...

    inspinia admin - v2.5 Rails_Seed_Project

    《Inspinia Admin - v2.5 Rails Seed Project:打造高效后台管理的全面解析》 在Web开发领域,后台管理界面的设计与实现是一项至关重要的任务,它直接影响到开发者的工作效率和用户体验。Inspinia Admin是一款广受...

    InspiniaAdmin 2.5 Rails_Seed_Project

    《InspiniaAdmin 2.5在Rails框架下的种子项目详解》 InspiniaAdmin 2.5 Rails_Seed_Project是一款基于Bootstrap框架的高级管理模板,专为Ruby on Rails开发者设计,旨在加速Web应用程序的开发过程。这个项目作为...

    Ruby on Rails_ Up and Running

    RUBY的经典之作,对其在RAILS下开发写得很详细

    ruby rails_kindeditor(编译器)插件

    Ruby on Rails 是一个流行的开源 web 开发框架,它基于 Ruby 语言,以其“约定优于配置”的设计理念和 MVC(模型-视图-控制器)架构模式受到开发者喜爱。在开发过程中,有时候我们需要集成富文本编辑器来方便用户...

    Rails_3_Cheat_Sheets.pdf

    Rails_3_Cheat_Sheets.pdf

    InspiniaAdmin 2.5 Rails_full_version

    InspiniaAdmin 2.5 Rails_full_version

    jruby_activerecord_test:尝试让JRuby使用ActiveRecord 6

    rails new jruby_activerecord_test和配置database.yml或克隆此rails new jruby_activerecord_test cd到该文件夹​​并运行ruby -v确保您正在使用JRuby。 .tool-versions文件将其设置为jruby-9.2.13.0我也尝试了...

Global site tag (gtag.js) - Google Analytics