Как передать параметры в метод контроллера, когда вы вызываете его в консоли Rails? - PullRequest
2 голосов
/ 01 октября 2019

Я использую Rails 5. У меня есть этот контроллер ...

class MyObjectsController < ApplicationController

  def create
    my_object = MyService.build(create_params)

Я хотел бы вызвать метод create в консоли rails, но я получаю эту ошибку ...

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))

Как передать параметры в метод моего контроллера?

Ответы [ 4 ]

3 голосов
/ 10 октября 2019

Вы получаете эту ошибку, потому что метод create не получает аргументов. Чтобы правильно использовать действие create, вам нужно передать ActionController :: Parameters экземпляру вашего контроллера:

c = MyObjectsController.new
c.params = ActionController::Parameters.new(id: "abc")
c.create # It will not work if this controller uses authentication
0 голосов
/ 07 октября 2019

Если требуется вызвать метод действия контроллера с методом запроса POST через консоль rails и передать в него параметры, то это можно сделать с помощью следующих команд

# Request any of the application resource, for example root url to get authenticity token
app.get '/'
token = app.session[:_csrf_token]

# parameters to send
parameters = { my_object: { field_one: 'foo', field_two: 'bar' }, authenticity_token: token }

# Call controller method
app.post '/my_objects', params: parameters
0 голосов
/ 10 октября 2019

params в Rails не может получить доступ везде. Доступ к параметрам в Rails возможен только из класса, унаследованного от ActionController::Base, поэтому в консоли Rails вы не можете получить доступ к своему params, но вы можете получить доступ к params через открытый метод.

0 голосов
/ 07 октября 2019

Вы можете попробовать

app.post "? Create_params [id] = abc"

Например

app.post'/ users? user [name] = test & user [age] = 20'

пройдет следующее {"user" => {"name" => "test", "age" =>"20"}}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...