Rails: Как разместить POST внутри другого действия контроллера?

Это будет звучать странно, но выслушайте меня ... Мне нужно иметь возможность сделать эквивалент запроса POST к одному из моих других контроллеров.SimpleController в основном упрощенная версия более подробного контроллера. Как я могу сделать это соответствующим образом?

class VerboseController < ApplicationController
  def create
    # lots of required params
  end
end

class SimpleController < ApplicationController
  def create
    # prepare the params required for VerboseController.create
    # now call the VerboseController.create with the new params
  end
end

Может быть, я слишком обдумываю это, но я не знаю, как это сделать.

 Ismael Abreu15 мая 2012 г., 01:34
ты уверен, что тебе это нужно? Не было бы более уместным иметь подробное создание в качестве метода Mode
 Marnen Laibow-Koser11 дек. 2013 г., 04:49
@ TheDoctorWhat Восстановление данных POST после аутентификации, вероятно, являетсятольк случай, когда что-то подобное имело бы смысл, и даже там я бы искал другой подход. Это, конечно, не имеет смысла в контексте, в котором был задан вопрос.
 docwhat07 авг. 2012 г., 20:19
Хорошо, что все говорят, что этого не следует делать, но иногда это нужно делать. Например, восстановить данные POST после аутентификации и т. Д.
 Potch17 мая 2012 г., 09:14
Я полностью понимаю, что это то, что вы не должны делать, и что это приведет к совместной жизни собак и кошек, массовой истерии. Но если бы я хотел спеть песню, которая заканчивает мир, как бы яделат Это? Я принимаю аннулированную гарантию.

Ответы на вопрос(2)

-приложении, следуя тому же шаблону представления модели-адаптера) - это то, чего вам следует активно избегать. Если у вас возникает искушение сделать это, то это признак того, что вы боретесь с шаблонами и инфраструктурой, на которых построено ваше приложение, и что вы полагаетесь на логику, реализованную на неправильном уровне вашего приложения.

As @ismaelga предложено в комментарии; оба контроллера должны вызывать некоторый общий компонент для обработки этого общего поведения и держать ваши контроллеры "худыми". В Rails это часто метод для модельного объекта, особенно для такого рода поведения при создании, о котором вы, похоже, беспокоитесь в этом случае.

учше иметь два метода класса на модели. Он также намного лучше разделяет код. Затем вы можете использовать методы не только в контроллерах, но и в фоновых заданиях (и т. Д.) В будущем.

Например, если вы создаете Персона:

class VerboseController < ApplicationController
  def create
    Person.verbose_create(params)
  end
end

class SimpleController < ApplicationController
  def create
    Person.simple_create(params)
  end
end

Затем в модели «Человек» вы могли бы поступить так:

class Person
  def self.verbose_create(options)
    # ... do the creating stuff here
  end

  def self.simple_create(options)
    # Prepare the options as you were trying to do in the controller...
    prepared_options = options.merge(some: "option")
    # ... and pass them to the verbose_create method
    verbose_create(prepared_options)
  end
end

Надеюсь, это немного поможет. : -)

 mbigras11 февр. 2017 г., 07:15
Что если вы хотите перенаправить на другойaction: :create чтобы ты мог создать другую модель?

Ваш ответ на вопрос