Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby ransack作用域中的参数数目错误(给定0,应为1)_Ruby_Ransack - Fatal编程技术网

Ruby ransack作用域中的参数数目错误(给定0,应为1)

Ruby ransack作用域中的参数数目错误(给定0,应为1),ruby,ransack,Ruby,Ransack,控制器 我在作业和作业提交之间创建了关联 Job.rb模型 我有2份工作和4份提交的工作 作业收集 作业提交收集 我测试了在rails控制台中运行这段代码 搜索作业id为1的作业提交 搜索作业id为2的作业提交 我还试图将我的gem-ransack更新到masterbranch,但仍然没有解决这个问题。 感谢您提前提供的帮助。我的表格更新为: 搜索表 搜索参数 并删除JobSubmission.rb模型中的作用域 class JobSubmission < ApplicationRecor

控制器

我在作业和作业提交之间创建了关联

Job.rb模型

我有2份工作和4份提交的工作

作业收集

作业提交收集

我测试了在rails控制台中运行这段代码

搜索作业id为1的作业提交

搜索作业id为2的作业提交

我还试图将我的gem-ransack更新到masterbranch,但仍然没有解决这个问题。
感谢您提前提供的帮助。

我的表格更新为:

搜索表

搜索参数

并删除JobSubmission.rb模型中的作用域

class JobSubmission < ApplicationRecord
  belongs_to :job
end

谢谢大家…

这是因为ransack将0设置为false,将1设置为true

对于简单的关联ID@Mike Alibo的答案是最好的方法

但若任何人必须使用作用域按id进行搜索,您可以定义

def self.ransackable_scope_skip_sanitize_args %i[您的范围\姓名] 终止 在您的模型上,告诉ransack不要投射此作用域的参数

class Job < ApplicationRecord
  has_many :job_submissions
end
class JobSubmission < ApplicationRecord
  belongs_to :job
  scope :by_job, ->(id) { includes(:job).where(jobs:{id: id}) }

  def self.ransackable_scopes(auth_object = nil)
    %i(by_job)
  end
end
.search-panel
  %h4 Search File
  = search_form_for(@q, url:admin_job_submissions_path, method: :get, as: :q)  do |f|
    = f.label :by_job, "Job:"
    = f.collection_select(:by_job, Job.all, :id, :job_title, :include_blank => "None")

    = f.submit 'Search' , class: "button action-button__new-button"
id: 1, job_title: "Job 1"
id: 2, job_title: "Job 2"
id: 1, job_id: 1, file: "Job submission 1"
id: 2, job_id: 2, file: "Job submission 2"
id: 3, job_id: 1, file: "Job submission test to 1"
id: 4, job_id: 2, file: "Job Submission test 2"
irb(main):013:0> JobSubmission.ransack({"by_job" => 1}).result
Traceback (most recent call last):
        2: from (irb):13
        1: from app/models/job_submission.rb:6:in `block in <class:JobSubmission>'
ArgumentError (wrong number of arguments (given 0, expected 1))
irb(main):014:0> JobSubmission.ransack({"by_job" => 2}).result
  SQL (1.0ms)  SELECT  "job_submissions"."id" AS t0_r0, "job_submissions"."job_id" AS t0_r1, "job_submissions"."file" AS t0_r2, "job_submissions"."created_at" AS t0_r3, "job_submissions"."updated_at" AS t0_r4, "jobs"."id" AS t1_r0, "jobs"."job_title" AS t1_r1, "jobs"."published" AS t1_r2, "jobs"."summary_html" AS t1_r3, "jobs"."body_en_html" AS t1_r4, "jobs"."body_ph_html" AS t1_r5, "jobs"."created_at" AS t1_r6, "jobs"."updated_at" AS t1_r7 FROM "job_submissions" LEFT OUTER JOIN "jobs" ON "jobs"."id" = "job_submissions"."job_id" WHERE "jobs"."id" = $1 LIMIT $2  [["id", 2], ["LIMIT", 11]]
=> #<ActiveRecord::Relation [#<JobSubmission id: 2, job_id: 2, file: "Job submission 2", created_at: "2020-10-01 03:14:08", updated_at: "2020-10-01 03:14:08">, #<JobSubmission id: 4, job_id: 2, file: "Job Submission test 2", created_at: "2020-10-01 03:56:10", updated_at: "2020-10-01 03:56:10">]>
.search-panel
  %h4 Search File
  = search_form_for(@q, url:admin_job_submissions_path, method: :get, as: :q)  do |f|
    = f.label :job_id_eq, "Job:"
    = f.collection_select(:job_id_eq, Job.all, :id, :job_title, :include_blank => "None")

    = f.submit 'Search' , class: "button action-button__new-button"
def search_params
 params.permit(:utf8, :commit, q: [:job_id_eq])
end
class JobSubmission < ApplicationRecord
  belongs_to :job
end