Оценка condition
привела к NA
. Условие if
должно иметь либо результат TRUE
, либо FALSE
.
if (NA) {}
## Error in if (NA) { : missing value where TRUE/FALSE needed
Это может случиться случайно в результате результатов вычислений:
if(TRUE && sqrt(-1)) {}
## Error in if (TRUE && sqrt(-1)) { : missing value where TRUE/FALSE needed
Чтобы проверить, отсутствует ли объект, используйте is.na(x)
, а не x == NA
.
См. также связанные ошибки:
Ошибка в if / while (условие) {: аргумент имеет нулевую длину
Ошибка в if / while (условие): аргумент не интерпретируется как логический
if (NULL) {}
## Error in if (NULL) { : argument is of length zero
if ("not logical") {}
## Error: argument is not interpretable as logical
if (c(TRUE, FALSE)) {}
## Warning message:
## the condition has length > 1 and only the first element will be used
Невозможно предложить какое-либо решение, если версия используемых библиотек не указана. Для rom-sql 2.4.0
это просто работает:
#!/usr/bin/env ruby
# frozen_string_literal: true
require 'bundler/inline'
gemfile(false) do
source 'https://rubygems.org'
gem 'sqlite3'
gem 'rom-sql', '2.4.0'
gem 'rspec'
end
require 'rspec'
require 'rspec/autorun'
require 'dry-types'
require 'rom-sql'
require 'sqlite3'
RSpec.describe do
let(:uri) { 'sqlite::memory' }
let(:conn) { Sequel.connect(uri) }
let(:conf) { ROM::Configuration.new(:sql, conn) }
let(:container) { ROM.container(conf) }
let(:avatars) { container.relations[:avatars] }
let(:users) { container.relations[:users] }
before do
conn.create_table(:avatars) do
primary_key :id
Integer :user_id
String :url
end
conn.create_table(:users) { primary_key :id }
conf.relation(:avatars) do
schema(infer: true) do
associations do
belongs_to :user
end
end
end
conf.relation(:users) do
schema(infer: true) do
associations do
has_many :avatars
end
end
end
end
subject(:relation) do
users.join(:avatars).select { relations[:avatars][:url].as(:avatar_url) }
end
it do
users.insert
avatars.insert(user_id: 1, url: 'avatars/1')
avatars.insert(user_id: 1, url: 'avatars/2')
expect { relation.pluck(:avatar_url) }.not_to raise_error
expect(relation.pluck(:avatar_url)).to eq ['avatars/1', 'avatars/2']
end
end