在rails 2中关联俩个表时如下用:
User.find(
:all,
:joins => :profile,
:conditions => ['profile.age = ?', 33])
在rails 3中变成如下
User.joins(:profile).where('profile.age = ?', 33)
区别在于,后者可以跟each,all,count, first
query = User.joins(:profile).where('profile.age = ?', 33)
query.where('users.name = ?', name) unless name.nil?
query.where('profile.email = ?', email) unless email.nil?
query.all
因为有了AREL的支持
https://github.com/rails/arel
最大的优势是组合和lazy loading
class User
scope :by_age, lambda do |age|
joins(:profile).where('profile.age = ?', age) unless age.nil?
end
scope :by_name, lambda{ |name| where(name: name) unless name.nil? }
scope :by_email, lambda do |email|
joins(:profile).where('profile.email = ?', email) unless email.nil?
end
end
User.by_age(33).by_name(params[:name]).by_email(params[:email]).all
当然还有重用
class Tag
belongs_to :post
end
class Post
has_many :tags
belongs_to :user
scope :tagged, lambda do |tag|
joins(:tags).where('tags.name = ?', tag).group('posts.id')
end
end
class User
has_many :posts
end
# 标记为 'ruby-on-rails',并且是特定user的帖子
User.where('users.id = ?', 232423).posts.tagged('ruby-on-rails').count
分享到:
相关推荐
rails-scope Ruby gem,它允许 nVisium 为评估目的准确自动地确定 Ruby on Rails 应用程序的范围。输出将包括代码复杂度路线控制器、视图和模型的数量控制器、视图和模型中的代码行以及正在使用的 RubyGems 的名称...
### Ruby on Rails: The Scope Method 在Ruby on Rails框架中,`scope`方法是一个非常强大的工具,用于定义数据库查询的预设条件,从而简化代码并提高可读性和可维护性。下面将详细介绍`scope`方法的基本概念、用法...
3. **`named_scope`**:这个在 Rails 2.x 中广泛使用的特性已被弃用,取而代之的是 `scope`,它可以接收 Proc 对象或 SQL 字符串,使得查询更加灵活。 4. **`with_scope` 和 `with_exclusive_scope`**:这两个方法也...
**命名范围查询(Named scope)** 命名范围查询是一种将常用查询封装起来的方法,使得开发者可以通过调用模型上的方法来进行查询。Rails 2.1增强了命名范围查询的功能,使其更加灵活且易于使用。 **基于UTC的迁移...
3. **Joins**:Rails支持多种类型的JOIN,包括`inner_join`、`left_outer_join`等,可以用来联合多个表进行复杂查询。 4. **Associations**:Rails的关联功能允许模型之间建立联系,如`has_many`、`belongs_to`、`...
3. **代码组织**:遵循约定优于配置的原则,如控制器放在`app/controllers`,模型在`app/models`,视图在`app/views`。保持目录结构清晰,有利于团队协作。 4. **命名规范**:使用有意义的变量名、方法名和类名,...
此次分享不仅吸引了众多开发者,甚至连Rails 3的核心开发者Yehuda Katz都表示了极大的兴趣,并主动请求获取演讲幻灯片。基于这次演讲的内容,Bullet插件的作者黄志敏(flyerhzm)开发了一个名为`rails_best_...
### Ruby on Rails 2.1 新特性详解 #### 引言 自2004年David Heinemeier Hansson从其项目Basecamp中提取并发布了Ruby on Rails框架以来,这一框架已经成为Web开发领域的重要组成部分。经过多年的迭代和发展,Ruby ...
Rails的设置 Ruby gem通过将ActiveRecord实例的设置作为序列化的Hash存储在单独的数据库表中来处理ActiveRecord实例的设置。 包括命名空间和默认值... key :calendar , :defaults => { :scope => 'company' } end end
- **路由分组**:当需要为一组路由添加相同的前缀或约束条件时,可以使用`scope`块来进行分组。这有助于保持路由文件的整洁和可维护性。 - **路由列表**:可以使用`rake routes`命令查看当前项目的全部路由规则。 #...
**3. Nest Resources to Scope Access** 解释如何通过嵌套资源来组织API端点,以便更好地控制访问权限和数据范围。 **4. Toggle Attributes with Ajax** 展示如何使用Ajax技术来实现异步操作,如动态切换模型属性...
3. **查询API**:详述Active Record查询接口,包括链式查询、关联(associations)、条件查询、聚合函数等。 4. **模型关系**:讲解一对一、一对多、多对多等关系的建立与管理,以及如何通过关联进行数据检索。 5....
4. **The default object (self) and scope**:Ruby中的`self`关键字,它如何指示方法调用的目标对象,以及作用域规则,包括局部作用域、实例作用域和类作用域。 5. **Control flow techniques**:控制流程的技巧,...
- **命名范围(Named Scope)**:通过命名范围,开发者可以定义重用的查询,这不仅提高了代码的可读性和可维护性,还减少了冗余的数据库查询,从而提升了应用性能。 - **基于UTC的迁移**:在Rails 2.1中,所有的数据库...
8. **多语言路由**:如果你的应用需要根据用户选择的语言来显示不同版本的页面,Rails可以通过`scope`和`:locale`参数实现多语言路由。 9. **测试**:确保在测试环境中也正确地处理了国际化,可以编写测试用例来...
表决投票_3太过时了,不再被维护投票_fu_rails_3 允许任意数量的实体(包括用户)对模型进行投票。 (现在兼容Banana和Rails 3!... 引入了一些较新的Rails功能,例如named_scope和:polymorphic关键字添加“ has_k
### Rails 最佳实践 #### 引言 Rails作为一款热门的Web开发框架,因其高效、简洁及优雅的设计理念而受到广大开发者的喜爱。随着项目的规模不断增大与复杂度的提升,如何编写高质量的Rails代码成为了开发者们关注的...
Ruby-ActionPolicy是一个专门为Ruby on Rails应用程序设计的授权框架,它的目标是帮助开发者在应用中实现细粒度的权限控制,以确保用户只能访问他们被允许的数据和执行被授权的操作。ActionPolicy借鉴了如Pundit和...