这次来介绍with_scope方法的使用。
继续前面的例子,我们希望只取得complete为false的前20条数据,我们可以给find_incomplete方法添加一个Hash参数,然后使用with_scope将
额外的参数附加到我们的查询方法里:
class Task < ActiveRecord::Base
belongs_to :project
def self.find_incomplete(options = {})
with_scope :find => options do
find_all_by_complete(false, : order => 'created_at DESC')
end
end
end
class TasksController < ApplicationController
def index
@tasks = Task.find_incomplete :limit => 20
end
end
class ProjectsController < ApplicationController
def show
@project = Project.find(params[:id])
@tasks = @project.tasks.find_incomplete :limit => 20
end
end
这样我们就可以在TasksController和ProjectsController里使用:limit来限定取前20条数据了
不过这样使用with_scope有一个缺点,就是我们不能在调用find_incomplete时指定: order条件来覆盖该方法定义时默认的: order条件
能不能改进一下我们的find_incomplete方法来解决这个问题呢?
很简单,我们可以将额外的参数merge进来:
class Task < ActiveRecord::Base
belongs_to :project
def self.find_incomplete(options = {})
find_all_by_complete(false, {: order => 'created_at DESC'}.merge(options))
end
end
或者使用ActiveSupport对Hash的扩展方法reverse_merge:
class Task < ActiveRecord::Base
belongs_to :project
def self.find_incomplete(options = {})
find_all_by_complete(false, options.reverse_merge(: order => 'created_at DESC'))
end
end
分享到:
相关推荐
Remove Emoji ( 2021 ) 此为针对「移除」Unicode ...original_string = ":smiling_face_with_smiling_eyes::smiling_face_with_heart-eyes::relieved_face::face_with_head-bandage::angry_face_with_horns::ogre::gir
持续移动且不破坏事物 :factory: :building_construction: :construction: :construction_worker: 正在建设中-请稍后再回来!
除了在模型中定义`scope`之外,还可以使用`has_scope` gem来将查询条件映射到控制器的过滤器中。这使得可以根据HTTP请求参数自动应用查询条件,从而大大简化了控制器的代码。例如: ```ruby # 在模型中定义scope ...
Rails管理员状态机 主存储库已移至gitlab,所有新代码将在其中: 从rails_admin正确管理状态 允许从Rails Admin轻松地将state_machine事件发送到模型,包括对ActiveRecord \ Mongoid和自定义状态字段名称的支持以及...
在本篇内容中,我们将深入探讨如何利用Ruby on Rails(简称Rails)这一强大的Web应用程序框架来构建可伸缩且易于维护的RESTful API。Rails以其简洁优雅的语法、高效的开发速度以及良好的社区支持而闻名,这使得它...
允许您使用为Rails应用程序的前端供电。 是将前端工具像Ruby一样进行编程,纯属喜悦! :smiling_face_with_heart-eyes: 或在运行的检查。 产品特点 :high_voltage: :light_bulb: 即时服务器启动 :high_voltage: ...
从创建和发送电子邮件到监视和管理其统计信息,您可以使用Email-Dashboard做真正有用的事情,而不必担心时区浪费。 您可以 :link: 。 :anger_symbol: 表中的内容 :restroom: 为了谁? :globe_showing_Asia-...
Rails::API 是 Rails 的精简版本,针对不需要使用完整 Rails 功能的开发者。 Rails::API 移除了 ActionView 和其他一些渲染功能,不关心Web前端的开发者可更容易、快速地开发应用程序,因此运行速度比正常的 Rails ...
:thinking_face: 用户流 应用预览功能(注册,采用,其他)RubyCritic分析使用RubyCritic gem分析了该项目,其得分为96.32 。 最后项目分析主要技术响应Native&Expo; Ruby on Rails API; PostgreSQL; Heroku。...
《敏捷Web开发与Rails》第三版是一本深入探讨Ruby on Rails框架在敏捷软件开发方法论下的应用指南。本书由多位知名作者共同编写,包括Sam Ruby、Dave Thomas、David Heinemeier Hansson等,他们都是在Ruby社区内享有...
image_optim_rails 使用image_optim gem优化rails图像资产。 在文件中可以找到获取二进制文件的选项和说明。安装添加到您的Gemfile : gem 'image_optim_rails' 使用 : gem 'image_optim_rails'gem 'image_optim_...
安装要启用rails_admin_history_rollback ,请将以下内容添加到您的Gemfile确保将其添加到rails_admin之后: gem 'rails_admin'gem 'rails_admin_history_rollback' 不用说,此插件还需要paper_trail gem。...
Rails Admin内容生成器 使用创建内容的简单方法。 预习 示范 要求 依存关系 MiniMagick 支持的ORM ActiveRecord 支持的资产插件 CarrierWave 安装 使用rails <5和TurboLink <5进行测试 将此行添加到您的...
SEO 和 Ruby On Rails 由的SEO代理制作的示例应用程序,用于将Rails设置为SEO友好。教程您可以在找到教程,或在。安装 git clone git@github....
:smiling_face_with_heart-eyes: 此回购包含的库将使您可以轻松地将Vite集成到您喜欢的Ruby框架中,例如或 。 为什么要Vite? :thinking_face: Vite,这意味着开发服务器的启动速度非常快,并且您的更改将立即...
介绍插件,用于对记录进行排序(使用 gem)安装要启用rails_admin_acts_as_list,请将以下内容添加到您的Gemfile : gem 'rails_admin_acts_as_list'gem 'rails_admin' 重要提示: rails_admin_acts_as_list之前必须...
一个项目模板,用于为AWS Lambda快速创建一个新的Rails应用程序。 细节: Ruby 2.7运行时上的Railsv6.x。 集成JavaScript开发。 使用LibSass&Webpacker编译CSS / JS资产。 没有ActiveRecord。 阅读我们的指南...
参见安装将solidus_geocoding添加到您的Gemfile中: gem 'solidus_geocoding' 捆绑您的依赖项并运行安装生成器: bundlebundle exec rails g solidus_geocoding:install测验首先捆绑您的依赖项,然后运行rake 。...
:telescope: 我目前在担任Ruby on Rails的后端开发人员。 :smiling_face_with_sunglasses: :seedling: 我目前正在学习所有内容。 :grinning_face_with_sweat: :goal_net: 2021年目标:致力于开源项目。 :star-...