Ruby on rails 范围不为';t接收数组作为参数

Ruby on rails 范围不为';t接收数组作为参数,ruby-on-rails,scope,Ruby On Rails,Scope,我在模型中定义了以下范围: scope :answers_in, -> (answers = nil) do return unless answers.present? where(answer_1: answers).or(where(answer_2: answers)) end 应答应该由一个数组进行。但是,当我通过数组进行调用时,收到一个参数错误: AnswerConnection.answers_in([1, 2]) ArgumentError: wr

我在模型中定义了以下范围:

  scope :answers_in, -> (answers = nil) do
    return unless answers.present?
    where(answer_1: answers).or(where(answer_2: answers))
  end
应答
应该由一个数组进行。但是,当我通过数组进行调用时,收到一个参数错误:

AnswerConnection.answers_in([1, 2])
ArgumentError: wrong number of arguments (given 2, expected 0..1)
        from /vagrant/farma_alg_reborn/app/models/answer_connection.rb:7:in `block in <class:AnswerConnection>'
        from /usr/local/rvm/gems/ruby-2.3.1/gems/activerecord-5.0.1/lib/active_record/scoping/named.rb:159:in `instance_exec'
        from /usr/local/rvm/gems/ruby-2.3.1/gems/activerecord-5.0.1/lib/active_record/scoping/named.rb:159:in `block (2 levels) in scope'
        from /usr/local/rvm/gems/ruby-2.3.1/gems/activerecord-5.0.1/lib/active_record/relation.rb:351:in `scoping'
        from /usr/local/rvm/gems/ruby-2.3.1/gems/activerecord-5.0.1/lib/active_record/scoping/named.rb:159:in `block in scope'
        from (irb):2
        from /usr/local/rvm/gems/ruby-2.3.1/gems/railties-5.0.1/lib/rails/commands/console.rb:65:in `start'
        from /usr/local/rvm/gems/ruby-2.3.1/gems/railties-5.0.1/lib/rails/commands/console_helper.rb:9:in `start'
        from /usr/local/rvm/gems/ruby-2.3.1/gems/railties-5.0.1/lib/rails/commands/commands_tasks.rb:78:in `console'
        from /usr/local/rvm/gems/ruby-2.3.1/gems/railties-5.0.1/lib/rails/commands/commands_tasks.rb:49:in `run_command!'
        from /usr/local/rvm/gems/ruby-2.3.1/gems/railties-5.0.1/lib/rails/commands.rb:18:in `<top (required)>'
        from /usr/local/rvm/gems/ruby-2.3.1/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:293:in `require'
        from /usr/local/rvm/gems/ruby-2.3.1/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:293:in `block in require'
        from /usr/local/rvm/gems/ruby-2.3.1/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:259:in `load_dependency'
        from /usr/local/rvm/gems/ruby-2.3.1/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:293:in `require'
        from /vagrant/farma_alg_reborn/bin/rails:9:in `<top (required)>'
        from /usr/local/rvm/gems/ruby-2.3.1/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:287:in `load'
        from /usr/local/rvm/gems/ruby-2.3.1/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:287:in `block in load'
        from /usr/local/rvm/gems/ruby-2.3.1/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:259:in `load_dependency'
        from /usr/local/rvm/gems/ruby-2.3.1/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:287:in `load'
        from /usr/local/rvm/gems/ruby-2.3.1/gems/spring-2.0.0/lib/spring/commands/rails.rb:6:in `call'
        from /usr/local/rvm/gems/ruby-2.3.1/gems/spring-2.0.0/lib/spring/command_wrapper.rb:38:in `call'
        from /usr/local/rvm/gems/ruby-2.3.1/gems/spring-2.0.0/lib/spring/application.rb:191:in `block in serve'
        from /usr/local/rvm/gems/ruby-2.3.1/gems/spring-2.0.0/lib/spring/application.rb:161:in `fork'
        from /usr/local/rvm/gems/ruby-2.3.1/gems/spring-2.0.0/lib/spring/application.rb:161:in `serve'
        from /usr/local/rvm/gems/ruby-2.3.1/gems/spring-2.0.0/lib/spring/application.rb:131:in `block in run'
        from /usr/local/rvm/gems/ruby-2.3.1/gems/spring-2.0.0/lib/spring/application.rb:125:in `loop'
        from /usr/local/rvm/gems/ruby-2.3.1/gems/spring-2.0.0/lib/spring/application.rb:125:in `run'
        from /usr/local/rvm/gems/ruby-2.3.1/gems/spring-2.0.0/lib/spring/application/boot.rb:19:in `<top (required)>'
        from /usr/local/rvm/rubies/ruby-2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
        from /usr/local/rvm/rubies/ruby-2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
        from -e:1:in `<main>'
AnswerConnection.answers\u in([1,2])
ArgumentError:参数数目错误(给定2,应为0..1)
from/vagrant/farma_alg_reborn/app/models/answer_connection.rb:7:in'block in'
from/usr/local/rvm/gems/ruby-2.3.1/gems/activerecord-5.0.1/lib/active\u record/scoping/named.rb:159:in'instance\u exec'
from/usr/local/rvm/gems/ruby-2.3.1/gems/activerecord-5.0.1/lib/active\u record/scoping/named.rb:159:在“范围内的块(2个级别)”中
from/usr/local/rvm/gems/ruby-2.3.1/gems/activerecord-5.0.1/lib/active_record/relation.rb:351:在“范围”中
from/usr/local/rvm/gems/ruby-2.3.1/gems/activerecord-5.0.1/lib/active\u record/scoping/named.rb:159:在“范围内的块”中
来自(irb):2
from/usr/local/rvm/gems/ruby-2.3.1/gems/railties-5.0.1/lib/rails/commands/console.rb:65:in'start'
来自/usr/local/rvm/gems/ruby-2.3.1/gems/railties-5.0.1/lib/rails/commands/console\u helper.rb:9:in'start'
from/usr/local/rvm/gems/ruby-2.3.1/gems/railties-5.0.1/lib/rails/commands/commands\u tasks.rb:78:在“控制台”中
from/usr/local/rvm/gems/ruby-2.3.1/gems/railties-5.0.1/lib/rails/commands/commands\u tasks.rb:49:in“run\u command!”
from/usr/local/rvm/gems/ruby-2.3.1/gems/railties-5.0.1/lib/rails/commands.rb:18:in`'
来自/usr/local/rvm/gems/ruby-2.3.1/gems/activesupport-5.0.1/lib/active\u support/dependencies.rb:293:in“require”
from/usr/local/rvm/gems/ruby-2.3.1/gems/activesupport-5.0.1/lib/active\u-support/dependencies.rb:293:in'block in require'
来自/usr/local/rvm/gems/ruby-2.3.1/gems/activesupport-5.0.1/lib/active\u support/dependencies.rb:259:in'load\u dependency'
来自/usr/local/rvm/gems/ruby-2.3.1/gems/activesupport-5.0.1/lib/active\u support/dependencies.rb:293:in“require”
from/vagrant/farma_alg_reborn/bin/rails:9:in`'
来自/usr/local/rvm/gems/ruby-2.3.1/gems/activesupport-5.0.1/lib/active\u support/dependencies.rb:287:in'load'
from/usr/local/rvm/gems/ruby-2.3.1/gems/activesupport-5.0.1/lib/active\u support/dependencies.rb:287:in'block in load'
来自/usr/local/rvm/gems/ruby-2.3.1/gems/activesupport-5.0.1/lib/active\u support/dependencies.rb:259:in'load\u dependency'
来自/usr/local/rvm/gems/ruby-2.3.1/gems/activesupport-5.0.1/lib/active\u support/dependencies.rb:287:in'load'
from/usr/local/rvm/gems/ruby-2.3.1/gems/spring-2.0.0/lib/spring/commands/rails.rb:6:in'call'
from/usr/local/rvm/gems/ruby-2.3.1/gems/spring-2.0.0/lib/spring/command_wrapper.rb:38:in'call'
from/usr/local/rvm/gems/ruby-2.3.1/gems/spring-2.0.0/lib/spring/application.rb:191:in'block in service'
from/usr/local/rvm/gems/ruby-2.3.1/gems/spring-2.0.0/lib/spring/application.rb:161:in'fork'
from/usr/local/rvm/gems/ruby-2.3.1/gems/spring-2.0.0/lib/spring/application.rb:161:in'serve'
from/usr/local/rvm/gems/ruby-2.3.1/gems/spring-2.0.0/lib/spring/application.rb:131:in'block in run'
from/usr/local/rvm/gems/ruby-2.3.1/gems/spring-2.0.0/lib/spring/application.rb:125:in'loop'
from/usr/local/rvm/gems/ruby-2.3.1/gems/spring-2.0.0/lib/spring/application.rb:125:in'run'
来自/usr/local/rvm/gems/ruby-2.3.1/gems/spring-2.0.0/lib/spring/application/boot.rb:19:in`'
from/usr/local/rvm/rubies/ruby-2.3.1/lib/ruby/2.3.0/rubygems/core\u ext/kernel\u require.rb:55:in'require'
from/usr/local/rvm/rubies/ruby-2.3.1/lib/ruby/2.3.0/rubygems/core\u ext/kernel\u require.rb:55:in'require'
from-e:1:in`'

这是一个bug,Rails作用域不能与数组一起工作,还是我做错了什么?

您必须在
方法中输入一个参数。试试这个:

where(user_1: answers).or(where(user_2: answers))

更新(ArgumentError:参数数量错误)

无法为作用域设置默认参数值:

scope :answers_in, -> (answers = nil) do
因此,将其替换为:

scope :answers_in, -> (answers) do
或者,如果希望参数是可选的,请按如下方式定义范围:

scope :answers_in, -> (*answers) do

但是,您必须将数组元素作为单独的参数传递
AnswerConnection.answers\u in(1,2)
而不是
AnswerConnection.answers\u in([1,2])
我更新了我的答案(并将
user\u x
更改为
answer\u x
,我意外切换)。这又给我返回了一个参数错误。哪一行是AnswerConnection模型中的第七行?(参考/vagrant/farma\u alg\u reborn/app/models/answer\u connection.rb:7:in block in')是范围声明:
scope:answers\u in,->(answers=nil)do
那么,您确定只将一个answers数组传递到此方法吗?错误是,您试图在其中加入两个参数。你能告诉我,你是如何调用这个作用域的吗?是的,我通过了一个简单的数组,只是为了测试:
AnswerConnection.answers\u in([1,2])