在 Rails 控制台中调用控制器方法时,如何将参数传递给控制器​​方法?

sat*_*ish 4 console controller ruby-on-rails ruby-on-rails-5

我正在使用 Rails 5。我有这个控制器......

class MyObjectsController < ApplicationController

  def create
    my_object = MyService.build(create_params)
Run Code Online (Sandbox Code Playgroud)

我想在 rails 控制台中调用 create 方法,但出现此错误...

irb(main):007:0> MyObjectsController.new.create(:id => "abc")
Traceback (most recent call last):
        2: from (irb):7
        1: from app/controllers/my_objects_controller.rb:4:in `create'
ArgumentError (wrong number of arguments (given 1, expected 0))
Run Code Online (Sandbox Code Playgroud)

如何将参数传递给我的控制器方法?

Man*_*eto 17

您收到此错误是因为create方法没有收到任何参数。为了正确使用创建操作,您需要将 ActionController::Parameters 传递给控制器​​的实例:

c = MyObjectsController.new
c.params = ActionController::Parameters.new(id: "abc")
c.create # It will not work if this controller uses authentication
Run Code Online (Sandbox Code Playgroud)

  • 这个“答案”在一些背景下会更好。另外,这个 `new({id: "abc"})` 可以只是这个 `new(id: "abc")`。少打字总是更好。 (3认同)