Rails 测试错误:WHERE 的参数必须是布尔类型,而不是整数类型

2024-04-13

用户可以通过 has_many 关联为帖子投票。我在运行测试时收到此错误:

ActiveRecord::StatementInvalid: PG::DatatypeMismatch: ERROR: argument of WHERE must be type boolean, not type integer

从这个测试来看:

test "should unvote a post the standard way" do
  @user.vote(@post_2)
  postvoterelationship = @user.active_post_vote_relationships.find_by(voted_id: @post_2.id)
  assert_difference '@user.postvoting.count', -1 do
    delete postvoterelationship_path(postvoterelationship)
  end
end

postvoterelationships_controller.rb

def destroy
  @user = Postvoterelationship.find(params[:id]).voter
  @post = Postvoterelationship.find_by(params[:id]).voted
  @user.unvote(@post)
  respond_to do |format|
    format.html do
      redirect_to @user
    end
    format.js
  end
end # destroy

路线.rb

resources :postvoterelationships,  only: [:create, :destroy]

后投票关系.rb

class Postvoterelationship < ActiveRecord::Base
  belongs_to :voter, class_name: "User"
  belongs_to :voted, class_name: "Post"
  validates  :voter_id, presence: true
  validates  :voted_id, presence: true
end

user.rb

has_many :postvoting, through: :active_post_vote_relationships, source: :voted

EDIT:

服务器日志:

Started DELETE "/postvoterelationships/207" for ::1 at 2015-06-16 21:02:07 +0100
Processing by PostvoterelationshipsController#destroy as JS
Parameters: {"utf8"=>"✓", "authenticity_token"=>"bP17sWN2k6lFqnNxEa6NNEO5yWXkGopi9PSXLIEKzooR3XUfF4chhS3+W+9WP8EB3GwzfhsauAyPiIp1/kkh9A==", "commit"=>"Unvote", "id"=>"207"}
Character Load (0.3ms)  SELECT  "characters".* FROM "characters" WHERE "characters"."callsign" = $1 LIMIT 1  [["callsign", "bazzer"]]
User Load (0.4ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1  [["id", 1]]
Postvoterelationship Load (1.2ms)  SELECT  "postvoterelationships".* FROM "postvoterelationships" WHERE "postvoterelationships"."id" = $1 LIMIT 1  [["id", 207]]
Character Load (0.7ms)  SELECT  "characters".* FROM "characters" WHERE "characters"."id" = $1 LIMIT 1  [["id", 1]]
Postvoterelationship Load (1.8ms)  SELECT  "postvoterelationships".* FROM "postvoterelationships" WHERE (207) LIMIT 1
PG::DatatypeMismatch: ERROR:  argument of WHERE must be type boolean, not type integer
LINE 1: ...ationships".* FROM "postvoterelationships" WHERE (207) LIMIT...
                                                         ^
: SELECT  "postvoterelationships".* FROM "postvoterelationships" WHERE (207) LIMIT 1
Completed 500 Internal Server Error in 14ms (ActiveRecord: 4.3ms)

ActiveRecord::StatementInvalid (PG::DatatypeMismatch: ERROR:  argument of WHERE must be type boolean, not type integer
LINE 1: ...ationships".* FROM "postvoterelationships" WHERE (207) LIMIT...
                                                         ^
: SELECT  "postvoterelationships".* FROM "postvoterelationships" WHERE (207) LIMIT 1):
app/controllers/postvoterelationships_controller.rb:24:in `destroy'

您是否尝试过查看所做的 SQL 查询?您可以在测试环境中展示它们,检查这个问题 https://stackoverflow.com/questions/6884408/how-to-show-sql-query-log-generated-by-a-rspec-test.

And, in postvoterelationships_controller.rb, 我认为:

  @post = Postvoterelationship.find_by(params[:id]).voted

应该:

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

Rails 测试错误:WHERE 的参数必须是布尔类型,而不是整数类型 的相关文章

  • render_views 在 rspec 中做什么?

    我对 rspec 很陌生 对 Rails 也很陌生 在为控制器编写测试用例时 我注意到render views经常使用 这是做什么的 如果我不调用它会发生什么 它呈现控制器规范中的视图 如果不放置 render views 视图将不会渲染
  • 如何防止

    标签在 Rails 中使用tinymce 包裹我的输入?

    默认情况下 tinymce 输入作为段落标签传递到 DOM 我想删除该元素包装器 以便tinymce 准确地传递我在文本编辑器中输入的内容 我怎么做 如果您提供代码 请让我知道该代码的添加位置吗 问候 事实上我解决了我的问题 我所要做的就是
  • 活动管理:同一列中的多个操作,类似于查看、编辑、删除

    我正在使用 active admin gem 为我的 ruby on Rails 应用程序提供一个管理控制台 我遇到一个问题 我想对索引页面上的每个项目进行多个自定义操作 就像查看 编辑 删除一样 但是 当添加自定义操作时 仅显示最后一个而
  • Rails 销毁除最新的 n 条记录之外的所有记录

    如何使用 Rails 的 ActiveRecord 销毁除最新的 n 条记录之外的所有记录 我可以使用 order 和 limit 获取最新的 n 条记录 但如何销毁逆函数 这些方法中的任何一个都可以做到这一点 Fetch your lat
  • Ruby on Rails / Devise - 重置密码时绕过模型中的自定义验证选项

    在我的项目中 我更改了 Devise 中的注册表单 以通过访问器添加 agree 选项 用户必须接受服务条款才能注册等 如果他们不同意 则无效 当用户尝试编辑其帐户信息以寻求 agree 验证时 这导致了问题 但我能够添加一个 unless
  • 我有什么理由应该嘲笑?

    我也是 Mockito 和 PowerMockito 的新手 我发现我无法使用纯 Mockito 测试静态方法 因此我需要使用 PowerMockito 对吗 我有一个非常简单的类 名为 Validate 使用这个非常简单的方法 publi
  • 如何将 current_user 传递给 Sidekiq 的 Worker

    我正在努力通过current user or User find 1 到工作模块 但在 sidekiq 的仪表板中出现错误 localhost 3000 sidekiq retries NoMethodError 未定义方法 支持 字符串
  • 如何通过迁移向现有索引添加“唯一”约束

    我怎样才能添加unique true对 Rails 数据库中已有索引的约束 我尝试通过以下方式迁移 def change add index editabilities user id list id unique true end 但迁移
  • 使用 Protractor 检查浏览器控制台中没有错误

    我正在使用 Protractor 来测试 AngularJS 我想检查在测试结束时是否没有发生未捕获的异常并打印到浏览器控制台 有没有一种简单的方法可以做到这一点 如果您将 Protractor 与 Jasmine 一起使用 请使用以下代码
  • 没有路线匹配... Rails Engine

    所以我不断收到错误 No route matches action gt create controller gt xaaron api keys 测试中抛出的是 it should not create an api key for th
  • javascript - Twitter bootstrap jquery 插件未编译用于生产

    我正在使用 Twitter Bootstrap 开发 3 1 Rails 应用程序塞胡纳克的宝石 https github com seyhunak twitter bootstrap rails 在生产模式下 我可以通过管道预编译使用基本
  • Delayed_job不会运行用户定义的方法

    我一直在尝试让 DelayedJob 在后台运行一些用户定义的方法 对于这个测试用例 我在助手中定义了以下方法 def test case u User new u first name JimBob u last name joe u e
  • Rails 教程 - User.rb 文件错误

    我正在关注 Railstutorial org 第 7 章 我正在尝试运行该应用程序 但出现以下代码错误 该错误表明我需要在文件末尾添加另一个 结束 但我已经尝试过此操作 但没有成功 错误是 Users woshea rails sampl
  • 使用 Rails 4(和 Hstore)在 PostgreSQL 中存储嵌套哈希

    我有一个 Rails 应用程序 它聚合了来自 Google API 的大量数据 我当前将 JSON 响应存储在 MongoDB 中 因此我的 Rails 应用程序同时具有 pg 和 mongo 然而 今天 我遇到了 PostgreSQL H
  • 在Rails 3中,如何使用button_to更改布尔值?

    我正在尝试编写一个button to 语句来更新我的activerecord 数据库中的布尔值 这是我尝试过的 从更大的角度来看 我想做的是有一个按钮可以更新支付对象并触发对宝石汇款与亚马逊支付进行通信的私有方法的调用 所以 1 如何使用b
  • 您在哪里存储 Rails 应用程序的版本号?

    我们用精彩的语义版本控制 http semver org 版本化 Rails 应用程序时的范例 我的一个问题是最好将这个号码存储在哪里 我见过它存储在 lib environment rb etc 只是想知道人们对最佳实践的看法是什么 我的
  • 无法在 Windows 7 上安装 Rmagick 和 Imagemagick

    当我跑步时gem install rmagick 2 13 1 gem从 rmagick 2 13 1 gem 所在的目录中 我收到一个错误 指出它无法构建 gem 本机扩展 下面显示 c Ruby192 bin ruby exe extc
  • 强制执行 has_many 但当前只有一个关联的“rails 方式”是什么?

    我有一个简单的 Rails 应用程序 其中包含模型项目和阶段 一个项目有许多阶段 但一次只能有一个阶段处于活动状态 即 当前 我仍然希望其他阶段可以访问 但当前阶段应该是应用程序的主要锚点 关于如何实现此要求的决定对我如何处理模型访问 验证
  • 将 gcov 与 CMake/CDash 结合使用的详细指南?

    我在我的项目中使用 CMake 并设置了 cdash 服务器以进行连续 夜间构建 一切运行良好 通过设置 crontab 我们可以将每小时 每晚的构建 测试结果自动上传到我们的 cdash 服务器 我的下一步是将测试覆盖率报告添加到构建中
  • 在 Jasmine 测试中配置 Angular 服务提供者

    我的服务有someModule module someModule provider someService function this options this get function return options 我正在编写规范 到目

随机推荐