首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ActiveRelation查询在Rails系统测试中为空,但可以交互工作

ActiveRelation查询在Rails系统测试中为空,但可以交互工作
EN

Stack Overflow用户
提问于 2019-05-07 02:01:14
回答 1查看 285关注 0票数 0

在交互式会话中工作,但在Rails系统测试中失败:

使用byebug,它会在show view中意外地返回空。

代码语言:javascript
复制
@item.children.where(done: false)

如果我跳过ActiveRelation,如下所示,我可以正确地看到对象

代码语言:javascript
复制
@item.children

#<ActiveRecord::Associations::CollectionProxy [#<Item id: 980190964, title: "my item", done: false

此命令意外地返回1条记录

代码语言:javascript
复制
@item.children.where.not(done:false)

设置(工作正常)

代码语言:javascript
复制
  setup do
    @user = users(:one)
    visit login_url
    fill_in "Email", with: @user.email
    fill_in "Password", with: 'secret'
    click_on "Login"    
  end

测试(工作正常,但项目不会显示!)

代码语言:javascript
复制
  test "create one entry" do
    visit item_url(@user.top_item)
    fill_in('item[title]', with: 'my item')
    find_field('item[title]').native.send_key(:enter)    
    visit current_path
    assert_selector "h5", text: "parentObject", match: :one
  end

show action的一部分:

代码语言:javascript
复制
@children = @item.children
@newItem = current_user.items.new

显示视图的一部分:

代码语言:javascript
复制
<% @children.where(done: false).each do |item| %>

甚至@children属性也是空的。重新加载不会产生任何影响。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-08 04:38:55

当我将下面的设置设置为false时,它起作用了。我直接在sqlite3中查看了模式,“done”字段的默认值是“false”而不是“0”。但为什么开发如此顺利,而不是测试呢?可能与仍在使用'false‘的yaml文件有冲突。因此,我将坚持使用不推荐使用的设置一段时间,直到我完全理解其含义,并可以稍后进行适当的迁移。

代码语言:javascript
复制
Rails.application.config.active_record.sqlite3.represent_boolean_as_integer = false

我尝试true的原因:

不推荐使用警告:不推荐将ActiveRecord::ConnectionAdapters::SQLite3Adapter.represent_boolean_as_integer设置为false。SQLite数据库已使用't‘和'f’序列化布尔值,并且在将此标志设置为true之前,必须将旧数据转换为1和0(其本机布尔序列化)。转换可以通过设置rake任务来完成,该任务运行

代码语言:javascript
复制
ExampleModel.where("boolean_column = 't'").update_all(boolean_column: 1)
ExampleModel.where("boolean_column = 'f'").update_all(boolean_column: 0)

对于所有模型和所有布尔列,在此之后,必须通过将以下内容添加到application.rb文件将标志设置为true:

代码语言:javascript
复制
Rails.application.config.active_record.sqlite3.represent_boolean_as_integer = true
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56010236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档