Rails 验证搜索参数

2024-02-17

我有一个相当安静的 API,但正在努力弄清楚如何干净地实现搜索。我希望能够搜索两个日期时间之间的所有记录,日期时间最多允许相隔 6 小时。目前在我的控制器方法中我有以下内容:

required_params = [:start_time, :end_time]
if check_required_params(required_params, params) and check_max_time_bound(params, 6.hours)
   ... rest of controller code here ...
end

check_required_pa​​rams 是一个应用程序方法,如下所示:

def check_required_params(required_params, params_sent)
required_params.each do |param|
  unless has_param(param, params_sent)
    unprocessable_entity
    return false
  end
end
  true
end

check_max_time 非常相似。

我知道在控制器中进行验证是违反最佳实践的,但我不知道如何将其干净地添加到模型中。


实际上你正在做的是(几乎)best practice并将(几乎)合并到 Rails 4 中strong parametsers。 (我说几乎是因为你check_max_time看起来它应该是您模型中的验证。)

您应该立即加入该功能,让自己更轻松地进行升级。参数强https://github.com/rails/strong_parameters https://github.com/rails/strong_parameters

文档就在那里,但以下是合并它的方法。

class SearchController < ApplicationController
  include ActiveModel::ForbiddenAttributesProtection

  def create
    # Doesn't have to be an ActiveRecord model
    @results = Search.create(search_params)
    respond_with @results
  end

  private

  def search_params
    # This will ensure that you have :start_time and :end_time, but will allow :foo and :bar
    params.require(:start_time, :end_time).permit(:foo, :bar #, whatever else)
  end
end

class Search < ActiveRecord::Base
  validates :time_less_than_six_hours

  private

  def time_less_than_six_hours
    errors.add(:end_time, "should be less than 6 hours from start") if (end_time - start_time) > 6.hours
  end
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rails 验证搜索参数 的相关文章

  • 如何将可求和指标压缩为 ruby​​ 表中的唯一标识符

    我正在尝试将可求和指标压缩为 ruby 表中的唯一标识符 我有下表 id1 123 id2 234 id1 345 压缩指标最有效的方法是什么 使其看起来像这样 id1 468 id2 234 我认为其他回答者想太多了 您只需一次操作即可完
  • 使用ajax轮询服务器

    我正在建立一个网站 该网站有一个用户可以互相发送消息的系统 我希望这样当登录用户收到消息时 他会在屏幕上看到一些更新告诉他这一点 这些消息不必是实时的 所以我认为我不想用彗星或主宰之类的东西来推动 相反 我很乐意每隔一分钟左右轮询一次服务器
  • 安装 Ruby 后,MAC OS X 上的活动开发人员路径无效

    我收到此错误 xcrun 错误 无效的活动开发人员路径 Applications Xcode app 缺少 xcrun Applications Xcode app usr bin xcrun This solution https sta
  • Symfony 2 中带有参数/参数的自定义验证器/约束

    我想创建一个类似于 GitHub 处理删除存储库的方式的验证器 要确认删除 我需要输入存储库名称 这里我想通过输入实体属性 名称 来确认删除 我需要将名称传递给约束或以某种方式访问 它 我该怎么做 你确实可以使用验证器约束来做到这一点 1
  • 对 Rails 3.1 中的特定路由强制使用 SSL

    我需要强制启用 SSL所有路线在我的申请中除了landing index In config application rb 我有 config force ssl true Then in landing controller rb 我有
  • 使用 Devise 和 Rails 从 Twitter Oauth 获取电子邮件

    我已经设置了一个基本的 Rails 应用程序来使用 twitter oauth gem 和设计 并且已经能够登录用户 但是 我的问题是我现在已将我的应用程序列入白名单 并且我想在响应中收到用户的电子邮件 我已遵循 Twitter 端的所有必
  • 开始使用 Ruby、Watir 和 Ruby Mine?

    我想对电子商务网站进行自动化测试 我安装了 Ruby Watir Gems 和 Ruby Mine 虽然我尝试过 RubyMine 但我不知道如何开始编写一个简单的脚本 如何开始使用 RubyMine 编写简单的脚本 我创建了一个项目 你下
  • Google 地图 api javascript 标签未验证

    正在寻找当前网站 正在使用 W3C 进行完全 HTML5 验证 这是无法验证的 Google 地图 API Javascript 标记 这是W3C的回应 没有开始字符引用 可能应该被转义为 它不喜欢 定义传感器是真还是假时 我尝试过以下方法
  • Rails 中的 plusDomains.circles.addPeople 的 Google API 产生 403 Forbidden

    Using Google API Ruby 客户端 https github com google google api ruby client class GooglePlus def self follow contact contac
  • 访问自定义表单控件的有效值

    我创建了代表密码表单控件的自定义组件 下面的代码已简化 密码组件 html
  • Rails validates_与模型的错误消息相关

    我在模型中使用 validates linked 来使用其他模型的验证代码 问题是验证失败的消息是 is invalid 我想将模型验证失败的实际描述错误冒泡到顶部 我发现这个问题 验证与模型的错误消息关联 https stackoverf
  • 如何使用 AngularJS、Devise 和 UI Router 全局实现身份验证?

    我对 Angular 很陌生 所以这可能是一个新手问题 我正在尝试实现一个简单的任务管理器 只是一个练习 以 Rails 作为后端 以 Angular 作为前端 到目前为止 我遵循了教程 一切正常 现在我想在全球范围内实施身份验证 这意味着
  • 如何生成devise gem的注册控制器

    我已经设置了 Devise 我已经在 user rb 文件中设置了以下代码 def self create auto password generated password Devise friendly token first 8 sel
  • Rails 应用程序在模型间保存方面遇到问题

    我正在开发一个从网站下载元标签并然后保存的应用程序 下载发生在一个名为Site 我想将下载的机器人元标签保存到一个名为的模型中robots tag它通过一个名为的连接表连接到站点meta tag sites 但是我在站点模型中编写的用于执行
  • Ruby:要散列的数组,没有任何局部变量

    我有一个字符串数组 array foo bar baz 我试图将其转变为以下内容 foo gt nil bar gt nil baz gt nil 我一直在这样做 new hash array each k new hash k nil n
  • json、rails、javascript 中的解析错误

    我需要将 ruby 数组放入 javascript 数组中 但出现解析错误 var characters 这就是我将 ruby 嵌入到内联 javascript 中的方式 但它出现了解析错误 我应该如何将此 ruby 数组放入 javasc
  • ActiveRecord 布尔验证接受非布尔值

    我正在尝试验证属性是否为布尔值 即 true 或 false 从我期望的 Rails 指南中 validates new out of stock inclusion in true false 可以工作 但它接受非布尔值 例如 Hi 作为
  • 从外部 gem 增强模型

    我在用着炼油厂CMS http refinerycms com 在我们的网站上让较少的技术人员更新内容 在 gem 内部 它们有一个 Page 类 用于映射站点上的每个顶级页面 我想在这个 Page 类上使用acts as taggable
  • ruby 包含问题

    class Foo def initialize a puts Hello a end end module Bar def initialize b puts b World end end class Sample lt Foo inc
  • 在您的装置数据中发现外键违规。确保您没有引用关联中不存在的标签

    我运行一个测试 rake test TEST test system my test rb 并看到这个 rake test TEST test system my test rb Running 1 tests in a single pr

随机推荐

  • 如何在远程桌面上强制用户注销之前发出公告消息?

    我想在虚拟机关闭之前向用户发布一个公告 背景 1 10个用户登录一台虚拟机 Windows虚拟桌面 Windows 10 2 虚拟机将在晚上10 00关闭 我想在晚上9 55给用户一个公告 让他们知道 3 我想使用任务计划和脚本一起工作来实
  • Linq to Sql - 查找祖先的分层查询

    给定 EmployeeId 如何构建 Linq to Sql 查询来查找该员工的所有祖先 每个 EmployeeId 都有一个关联的 SupervisorId 见下文 例如 查询 EmployeeId 6 Frank Black 的祖先应返
  • 在 UIManager 中找不到 React Native“RNCSafeAreaView”

    我正在 Mac 上运行一个反应本机应用程序 但我在 UIManager 中找不到 RNCSafeAreaView 通过在终端中键入以下命令来更新此模块的版本 npm 安装 电子邮件受保护 cdn cgi l email protection
  • 未解决的依赖关系 sbt-play-ebean

    这是我的插件 sbt addSbtPlugin com typesafe play sbt plugin 2 6 9 addSbtPlugin com typesafe sbt sbt play enhancer 1 2 2 addSbtP
  • 为什么我在 1024 个连接后会出现连接被拒绝的情况?

    我正在本地 Linux 服务器上进行测试 服务器和客户端都在同一台服务器上 在大约 1024 个连接之后 在我的代码中 我连接的地方出现连接被拒绝的情况 起初我以为这是 select 的 fd set max 限制为 1024 并将服务器更
  • 确保类型在 Go 编译时实现接口

    如何确保类型在编译时实现接口 执行此操作的典型方法是无法分配该类型的支持接口 但是我有几种类型只能动态转换 在运行时 这会生成非常粗暴的错误消息 而不会为编译时错误提供更好的诊断 在运行时发现我期望支持接口的类型实际上并不支持接口 这也是非
  • 如何将大小为 X 的 Java 集合分解为 X/Y 集合?

    我有一个 Java Set 特别是 HashSet 假设它的大小为 10k 如何将其分成 5 套 每套尺寸为 2k Guava https github com google guava有用于划分 Iterable 类的库 这可迭代对象 h
  • PyGObject GTK+ 3 - 文档?

    PyGObject 似乎没有真正的文档 本教程 http python gtk 3 tutorial readthedocs org en latest index html已经很接近了 我整个早上都在努力寻找对被接受的论点的描述Gtk W
  • ANTLR4 中是否有相当于“片段”标记的解析器?

    有没有办法告诉 ANTLR4 内联解析器规则 拥有这样的功能似乎是合理的 读完关于 ANTLR 的书后 权威的 ANTLR 4 参考 我还没有发现这种可能性 但是这四年可能已经发生了变化 既然这本书已经出版了 所以我想最好在这里问一下 考虑
  • 如何使用 tf.train.MonitoredTrainingSession 仅恢复某些变量

    如何告诉 tf train MonitoredTrainingSession 仅恢复变量的子集 并对其余变量执行初始化 从 cifar10 教程开始 https github com tensorflow models blob maste
  • 我可以使用 jQuery 淡入背景图像(CSS:background-image)吗?

    我有一个div包含文本和背景图像的元素 通过 CSS 属性设置background image 是否可以通过 jQuery 淡入背景图像 div background repeat no repeat background position
  • 使用当前年份将月日('%B %d')日期列解析为日期时间

    我有一个采用以下格式的专栏 Date June 22 June 23 June 24 June 25 我正在尝试将此列转换为 pandas df 中的日期时间 格式为 YYYY mm dd 我怎样才能做到这一点 我能够格式化日期并转换为 m
  • 德尔福64位? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 手动将mysql查询结果缓存到txt文件

    有没有办法手动将mysql查询结果缓存到txt文件中 Ex a 1 b 9 c 0 cache filename cached results md5 a b c txt if file exists cache filename resu
  • ebpf - 根据内核版本使用ringbuf和perfbuf

    我正在使用 ebpf 来捕获进程创建 我对内核 5 8 及更高版本使用ringbuf 并希望在同一 ebpf 内核文件中对旧内核使用 perfbuf 有一个关于它的很棒的博客https nakryiko com posts bpf core
  • 无法使用 html 文本框登录

    因为我使用html按钮和文本框来登录 所以我必须在源代码中的javascript中执行后面的代码才能执行后面的代码 无论我使用正确的用户名和密码 Admin 和 123 登录并单击登录按钮 还是不输入任何内容并单击登录按钮 它总是将我重定向
  • 如何删除文件中的第一行?

    我无法搜索特定的字符串 因为它们都非常相似 但我想要一些简单的方法来删除文件中的前 4 行 它们的长度也都是可变的 我考虑过 Perl 这一切似乎比我想象的要难 但如果可能的话 我想用 Perl AWK 或 shell 命令来完成 有人有一
  • 滚动时更改网址

    当我单击导航按钮时 我使用 jQuery 更改 URL 哈希 但是当我使用鼠标滚轮滚动时 URL 不会改变 我怎样才能做到这一点 如何使用它来完成 window history pushState object or string Titl
  • Twitter API 是否可以缩短 url?

    有没有办法从 API 获取缩短的 t co 网址 在通过 API 发布推文之前 我需要缩短一个 url 我应该怎么做 这 这是 Twitter API 支持的还是我必须使用其他一些 像 bit ly 这样的 url 缩短器 除了通过 Twi
  • Rails 验证搜索参数

    我有一个相当安静的 API 但正在努力弄清楚如何干净地实现搜索 我希望能够搜索两个日期时间之间的所有记录 日期时间最多允许相隔 6 小时 目前在我的控制器方法中我有以下内容 required params start time end ti