我猜this question与Rails 4很常见,但我的情况有所不同 .
我正在使用Sidekiq推迟创造就业机会;认为这是可能的,因为简单的数据,它的工作原理 . 通过简单的数据:
def perform
Foo.create(bar: "staff")
end
这是我的问题数据:
supports_controller.rb:
def create
params = support_params // seems to be issues here?
DelayedJobs.perform_in(1.minutes, current_user.id, params)
...
end
private
def support_params
params.require(:support).permit(:foo1, :foo2, :foo3)
end
app/workers/delayed_jobs.rb:
class DelayedJobs
include Sidekiq::Worker
def perform(user_id, params)
u = User.find(user_id)
support = u.supports.build(params)
Support.create(support) // create and save to db
end
end
通过网站(localhost:3000 / sidekiq /预定,我看到了详细信息 . 太棒了 . 但是过了一会儿它会重新出现错误 . 这个有什么帮助吗?
EDIT:
在sidekiq web参数中:
40,{“foo1”=>“a”,“foo2”=>“b”,“foo3”=>“c”}
为什么 user_id
(40)在外面?
2 回答
问题不在于Sidekiq;这行是ActiveRecord问题:
Support.create(support)
create
只接受哈希,但你给它一个Support
.这应该工作:
Protip:你可以通过在Rails控制台中运行
perform
方法的主体来消除Sidekiq作为嫌疑人 . 你'll see that you get the same error even when Sidekiq isn'吨参与 .我建议您在支持对象上调用save方法,因为当您使用构建方法时,它会返回一个新的支持实例,因此您只需要保存它 .
在您的控制器中尝试将参数更改为: