在 Rails 中检查和验证非模型参数的位置

2024-01-01

在 Ruby On Rails 中,您在哪里检查不是模型属性的 URL 参数(例如 page、per_page、sort_mode)?在控制器中还是在模型中?

例如,当执行更复杂的数据库查询时,您会检查参数并可能在控制器中设置默认值,然后执行以下操作MyModel.search(page, per_page, order, sort_mode, query),或者您会在模型内部设置验证并仅传递非操纵参数MyModel.search(params)?

以及如何将该参数报告回视图?例如,sort_mode 参数应该在视图上产生一个用于排序方向的小箭头。您是否检查并清理 params 哈希并从 params 获取视图中的数据,或者您是否使用自己的实例变量?


我倾向于清理控制器中的参数。

class ApplicationController < ActionController::Base
  before_filter :sanitise_params

  protected

  def sanitise_params
    # tidy up
    # set defaults
  end
end

模型声明其接口的良好做法是由控制器以正确的方式与它们对话。这样你就可以清楚地分离各层。

视图助手可以帮助处理视图。这里有一些例子 http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html作为 ActionPack 的 ActionView 的一部分。你可以把你自己的放进去app/helpers

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Rails 中检查和验证非模型参数的位置 的相关文章

  • 升级到 Rails 6 时是否有一种编程方法可以检测 Zeitwerk::NameError?

    我目前正在将旧的 Rails 应用程序迁移到 Rails 6 好像项目中有些文件和里面定义的类不一致 运行应用程序测试时我没有看到此错误 但部署后我收到如下错误 Zeitwerk NameError expected file app my
  • 如何将html id添加到rails中的form_for标签中?

    我正在尝试将 id 标签添加到我在 Rails 中创建的表单中 表单的开头有以下代码 我是否可以向 form for 嵌入式 ruby 添加一个 id 或者我是否必须创建一个 form tag 字段并在那里添加 id 如果我必须创建 for
  • 使用 RSpec 测试导轨金属/机架?

    假设我有一个名为 Preview 的 Metal 类 如何使用 RSpec 进行测试 当我尝试时 require spec helper describe Preview do it should return the posted con
  • xgboost :base_score参数的含义

    在 xgboost 的文档中我读到 基本分数 default 0 5 所有的初始预测分数 实例 全局偏差 这句话的意思是什么 基本分数是数据集中感兴趣事件的先验概率吗 IE 在包含 1 000 个观察值 其中 300 个正值和 700 个负
  • Ruby on Rails:Cucumber:如何点击打开新窗口的链接?

    我有一个在新窗口中打开的链接 我需要测试该新窗口中的应用程序部分 任何建议将不胜感激 定义一个包含以下代码的步骤 page driver browser switch to window page driver browser window
  • 默认:Rails 资源路由的排除选项

    一个小问题 我正在将 Rails 用于 REST API 但由于它是 RESTful API 所以我并不真正需要 new or edit我的任何资源的路由 因为人们只会完全通过自动 JSON 请求而不是图形方式与此 API 交互 例如 不需
  • 何时使用node.js、sinatra、rails? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 这 3 种语言 框架的最佳用途是什么 混合所有 或 2 个 有用吗 如果您正在构建一个完整的 Web 应用程序 您可能应该使用 Rails 因为
  • Rails Active Storage - 保留现有文件/上传吗?

    我有一个 Rails 模型 has many attached files 默认情况下 通过 Active Storage 上传时 如果您上传新文件 它会删除所有现有上传内容并将其替换为新文件 我有一个控制器破解 由于多种原因 它不太理想
  • 从 Rails 3.1.3 升级到 Rails 3.2.1。资产错误

    我尝试将应用程序从 Rails 3 1 3 升级到 Rails 3 2 1 但资产出现问题 我有这样的错误 ActionController RoutingError No route matches GET assets logos op
  • Rails 4 - 每次运行 rake db:migrate 命令时,rake 命令都会显示弃用警告

    pinterestclone rake db migrate DEPRECATION WARNING Sprockets method register engine is deprecated Please register a mime
  • 未知属性:user_id

    我在执行 current user stories build 期间收到错误未知属性 user id class User lt ActiveRecord Base has many stories class name Story for
  • 黄瓜与 RSpec

    我想开始深入研究 BDD 我以前从未使用过 TDD 现在 不确定我是否应该从学习 RSpec 开始 然后跳到 Cucumber 或者直接使用 Cucumber 我一直在互联网上阅读有关两者的内容 在我看来 Cucumber 可能是 RSpe
  • Devise:允许用户注册为“UsErNaMe”但使用“用户名”登录

    与大多数网站的工作方式相同 我将 UsErNaMe 存储在数据库中 但让用户使用 用户名 登录 这是一个相当明显且必要的功能 很多人似乎都问过它 但我不断遇到的解决方案似乎与 Devise 自己的文档脱节 例如 考虑这篇博文 http an
  • 设置asp.net验证器的顺序

    我使用 3 个验证器来验证文本框 但当在文本框中输入无效值时 所有验证器都会被触发 但我希望这些验证器按照特定的顺序工作 以便用户可以一一解决这些错误
  • rake db:migrate db:reset 和 db:schema:load 之间的区别

    和 之间的不同rake db migrate and rake db reset我很清楚 我不明白的是如何rake db schema load与前两者不同 只是为了确保我在同一页面上 rake db migrate 运行尚未运行的迁移 r
  • 如何将 devise/omniauth 重定向到我登录的页面?

    我通过omniauth 进行了身份验证 并且该链接通过layout application html haml 在每个页面上都可用 然而 当他们完成omniauth身份验证后 他们都会进入root权限 我如何设置它 以便他们重定向到他们单击
  • time_select 表单助手将新时间对象解释为 UTC,而不是配置的时区

    我遇到了对我来说似乎很简单的问题 但我无法弄清楚我做错了什么 在我的应用程序中 用户可以通过简单的 form for 添加他们的课程 他们可以输入课程讲座的开始时间和结束时间 如下所示 div class field Start Time
  • 子域中的 Rails url 助手 - 删除子域

    我网站上的用户可以拥有子域 例如 他们的页面网址是 name example com 登录的用户可以查看更多用户信息 因此在用户的显示页面上 我有一个使用以下代码生成的链接 user url user subdomain gt false
  • “heroku”命令存在于以下 Ruby 版本中:

    我在使用 heroku 工具带时遇到了重大问题 我正在使用 cedar 14 堆栈 当我尝试使用不是的 ruby 版本时ruby 2 0 0 dev我收到这个错误 rbenv heroku command not found The her
  • 如何让 Sidekiq 在 Heroku 上运行?

    这是我第一次尝试让 Redis 在 Heroku 上运行 我添加了一个工作dyno 就在今天 所以还没有付款 添加了RedisToGo Nano附加组件 在我的本地机器上测试了后台作业 并将应用程序推送到heroku heroku ps g

随机推荐

  • NodeJs 和 ExpressJs 无法设置 Cookie

    你能帮我创建cookie吗 因为我无法让它工作 我想在用户登录后设置和创建 cookie 但我不知道我的代码有什么问题 多谢你们 这是我的代码 如果您认为还有其他错误或代码更正 您可以帮我修复吗 多谢你们 app js deps var e
  • 显示最后一次 git 提交评论

    通常在提交期间 git commit m 我希望阅读我的最后评论以记住我取得的进展 有没有一种简单的方法可以通过命令行直接访问最后的提交消息 我使用的是 Windows git show 是输入速度最快的 但也会显示差异 git log 1
  • 创建新页面时,不考虑 css

    我能够根据用户输入自动创建一个新网页 但只有一个问题 CSS 对此不起作用 我知道如何将 css 文件附加到 HTML 文件 但这一次 它不起作用 为了帮助您直观地了解这一点 这是我到目前为止的代码 HTML lt content for
  • OSX cocoa 应用程序 - 获取 safari 选项卡信息

    我想知道是否可以以编程方式从 safari 获取任何选项卡 窗口信息 有图书馆可以做吗 我不喜欢 applescript 因为我发现 我想知道它在 Cocoa 框架中是否可行以及如何可行 你可以这样做脚本桥 https developer
  • Android Studio 添加 Adob​​e Creative SDK 时出错

    这是我的构建 gradle文件 我已关注this https creativesdk adobe com 教程 repositories mavenCentral jcenter mavenLocal maven url project r
  • SpringBoot Thymeleaf 序数

    我读过一些好文章 例如this one https stackoverflow com q 4011075 1756598解释了当给定一个时接收序数的方法int 现在 我有一个 LocalDate 对象 我可以使用任何以下方式格式化我的日期
  • 无法在 Internet Explorer 10 上加载 Google Cloud Endpoints

    我正在开发一个使用Google JavaScript 客户端库 https developers google com api client library javascript reference referencedocs加载一些通过以
  • .Net Core 是否支持每个环境的用户机密?

    假设我有指定的开发环境的连接字符串appsettings Development json以及中指定的暂存环境的连接字符串appsettings Staging json 要在开发和暂存之间切换 我需要做的就是导航到项目属性中的 Visua
  • Maven 在集成测试阶段运行 jetty

    I use failsafe插入 所以当我输入时mvn failsafe integration test它是我的集成测试的主角 这很棒 但我想要我的jetty server开始于pre integration那么阶段 我应该怎么办 我不想
  • Python:为什么存在 int.numerator 和 int.denominator?

    int numerator and int denominator对我来说是个谜 help int numerator states 有理数最低项的分子 但据我所知 int不是有理数 那么为什么会存在这些属性呢 See http docs
  • 如何获取 gstreamer 插件 - Windows

    我现在从 gstreamer freedesktop org 安装了 gstreamer 1 0 并进行了他们的教程 http gstreamer freedesktop org data doc gstreamer head manual
  • 当我们已经有一阶逻辑时,为什么还需要 PDDL?

    这可能是一个完全天真的问题 但我有兴趣知道具体原因 最初为什么要开发 PDDL 为什么我们不能使用一阶逻辑进行推理 解决问题的效率 使用更具体的语言来表达您的问题可以应用更具体的算法来解决问题 从理论上来看 FOL 是不可判定的 而大多数
  • Android Activity ClassNotFoundException - 尝试了一切

    我刚刚将应用程序重构为框架库和应用程序 但现在当我尝试在模拟器中启动应用程序时 我收到以下错误堆栈跟踪 06 02 18 22 35 529 E AndroidRuntime 586 FATAL EXCEPTION main 06 02 1
  • 如何将链接延伸到整个单元格?

    我有一个表 其中包含可以单击以编辑行的链接 锚点 我希望将这些链接拉伸到包含单元格的整个宽度和高度 我已经将它们设置为display block 所以它们有完整的宽度 问题是 我很难使用 CSS 将它们设置为全高 请参阅我的示例小提琴 ht
  • User.config 损坏

    因此 我做了相当多的研究来试图解决这个问题 但似乎无法 1 重现该问题 但更重要的是 2 找到一个最新的解决方案来修复它 这种情况在两周内已经发生过两次 其中 user config 文件会随机损坏 例如 XML 文件的块会丢失 从而导致应
  • 如何推送(使用 libgit2)

    如何使用 libgit2 进行推送 喜欢git push origin master在控制台上 我想使用C版本 克隆 打开 添加文件到索引并像魅力一样提交工作 请参阅code http pastebin com ta9EjMBn test
  • 聚焦时的 UWP 文本框背景

    由于某种原因 没有简单的方法可以将 TextBox 的焦点背景从默认的白色更改为白色 它工作的唯一方法 我需要它是深色或透明的 是创建自定义文本框 粘贴大量代码行 来自 然后编辑两行
  • 使用 Selenium 突出显示文本

    我有一个上下文敏感菜单 需要突出显示文本才能正常工作 但是 我在使用 Selenium 选择文本时遇到问题 我首先找到我正在寻找的 WebElement 然后尝试使用不同的可用鼠标事件与其进行交互 When I m trying to se
  • Android 上的远程调试 Chrome 问题

    我在 Android 设备 运行 Android 版本 4 0 4 的 LG Nitro 上使用 Chrome 开发人员工具的远程调试功能时遇到问题 几天前它工作得很好 但现在我的设备从未出现在 about inspect 页面上 我已关注
  • 在 Rails 中检查和验证非模型参数的位置

    在 Ruby On Rails 中 您在哪里检查不是模型属性的 URL 参数 例如 page per page sort mode 在控制器中还是在模型中 例如 当执行更复杂的数据库查询时 您会检查参数并可能在控制器中设置默认值 然后执行以