Помощник контроллера в рубине на рельсах - PullRequest
1 голос
/ 11 ноября 2011

Я новичок в рельсах, и мне интересно, если это лучший способ сделать то, что я хочу сделать.

У меня есть контроллер, который создает сущности.

В зависимости от того, что будет отправлено, я хочу либо создать новую сущность с нуля, либо скопировать существующую.

Пока у меня есть

def create
  if(params[:copy])
    return copy_existing_entity params
  else
    return create_new_entity params
  end
end

Пока что это выглядит странно - должно ли это быть сделано по-другому?

Исходя из Java-весны, я бы просто определил отдельные обработчики на контроллере следующим образом:

@RequestMapping(method = RequestMethod.POST, params="submit=Action 1")
public ModelAndView action1(@RequestParam("selectedItemKey") String key) {
    ModelAndView mav = new ModelAndView("action1");
    //Business logic
    return mav;
}

@RequestMapping(method = RequestMethod.POST, params="submit=Action 2")
public ModelAndView action2(@RequestParam("selectedItemKey") String key) {
    ModelAndView mav = new ModelAndView("action2");
    //Business logic
    return mav;
}

Предоставляет ли рельсы что-то подобное или я думаю об этом неправильно?

Спасибо за любые предложения

Ответы [ 2 ]

1 голос
/ 11 ноября 2011

Это вроде как плохо.Прежде всего, почему вы копируете сущности в первую очередь?Какой у вас сценарий использования?

Во-вторых, вы, вероятно, ставите логику не туда.Возможно, вам следует (1) выполнить отдельные действия контроллера create и copy или (2) передать params классу модели и дать ему понять, создает ли он или копирует.

0 голосов
/ 12 ноября 2011

Вы можете легко разделить его на два действия контроллера, но на самом деле я верю, что в обоих случаях вы создаете новую сущность. Так что POST :create - это хороший способ ОТДЫХА. И если вам нужно создать новый элемент, заполненный данными атрибутами, или создать новый элемент как копию другого, на самом деле это не имеет значения.

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