嵌套资源方法中的“参数缺失或值为空”
“param is missing or the value is empty” in nested resource method
我正在尝试在名为 jobs 的资源下创建一个名为 'pack' 的方法。
我的路线是这样的:
resources :jobs do
member do
get 'pack' => 'jobs#pack'
end
end
我的控制器方法的简化版本如下所示。
def pack
@job.pack
end
为了获得礼包,我有:
before_action :set_job, only: %i[show edit update destroy pack]
# Use callbacks to share common setup or constraints between actions.
def set_job
@job = Job.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def job_params
params.require(:job).permit(:description, :status, :client_id, :pack_size, :user_id)
end
我能够点击 my/end/point/jobs/1/pack 并触发控制器方法,但我遇到了错误:
param is missing or the value is empty: job
show 和 pack 方法都接收保存参数:
Parameters: {"id"=>"1"}
所以我不太确定为什么只有 #pack 方法会向我抛出作业丢失错误。为什么会发生这种情况,我该如何阻止它?
控制台输出:
Started GET "/api/v1/jobs/1/pack?user_id=1" for 127.0.0.1 at 2017-11-20 19:57:24 +0800
Processing by JobsController#pack as HTML
Parameters: {"user_id"=>"1", "id"=>"1"}
Job Load (0.2ms) SELECT "jobs".* FROM "jobs" WHERE "jobs"."id" = LIMIT [["id", 1], ["LIMIT", 1]]
Completed 400 Bad Request in 2ms (ActiveRecord: 0.2ms)
ActionController::ParameterMissing - param is missing or the value is empty: job:
app/controllers/jobs_controller.rb:87:in `job_params'
app/controllers/jobs_controller.rb:6:in `pack'
问题出在正文的第一部分job_params
。
您需要 params.require(:job)
中的 :job
,但参数中没有 :job
:
Parameters: {"user_id"=>"1", "id"=>"1"}
所以您可以删除 require
部分并在 job_params
中调用以下内容:
params.permit(:description, :status, :client_id, :pack_size, :user_id, :id)
注意:我已经在白名单中添加了 :id
,因为我可以看到它也存在于参数中。
我正在尝试在名为 jobs 的资源下创建一个名为 'pack' 的方法。
我的路线是这样的:
resources :jobs do
member do
get 'pack' => 'jobs#pack'
end
end
我的控制器方法的简化版本如下所示。
def pack
@job.pack
end
为了获得礼包,我有:
before_action :set_job, only: %i[show edit update destroy pack]
# Use callbacks to share common setup or constraints between actions.
def set_job
@job = Job.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def job_params
params.require(:job).permit(:description, :status, :client_id, :pack_size, :user_id)
end
我能够点击 my/end/point/jobs/1/pack 并触发控制器方法,但我遇到了错误:
param is missing or the value is empty: job
show 和 pack 方法都接收保存参数:
Parameters: {"id"=>"1"}
所以我不太确定为什么只有 #pack 方法会向我抛出作业丢失错误。为什么会发生这种情况,我该如何阻止它?
控制台输出:
Started GET "/api/v1/jobs/1/pack?user_id=1" for 127.0.0.1 at 2017-11-20 19:57:24 +0800
Processing by JobsController#pack as HTML
Parameters: {"user_id"=>"1", "id"=>"1"}
Job Load (0.2ms) SELECT "jobs".* FROM "jobs" WHERE "jobs"."id" = LIMIT [["id", 1], ["LIMIT", 1]]
Completed 400 Bad Request in 2ms (ActiveRecord: 0.2ms)
ActionController::ParameterMissing - param is missing or the value is empty: job:
app/controllers/jobs_controller.rb:87:in `job_params'
app/controllers/jobs_controller.rb:6:in `pack'
问题出在正文的第一部分job_params
。
您需要 params.require(:job)
中的 :job
,但参数中没有 :job
:
Parameters: {"user_id"=>"1", "id"=>"1"}
所以您可以删除 require
部分并在 job_params
中调用以下内容:
params.permit(:description, :status, :client_id, :pack_size, :user_id, :id)
注意:我已经在白名单中添加了 :id
,因为我可以看到它也存在于参数中。