Rails проверки. Нужны данные из других вещей. Несколько форм. Не быть сухим - PullRequest
0 голосов
/ 13 февраля 2010

(Рельсы новичка)

Здравствуйте!

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

У меня есть страница настроек, где вы можете создавать категории и процедуры (принадлежащие категории).

Индекс Настройки действий:

def categories_and_procedures   
    @prefs = @current_practice.preferences

    @category = @current_practice.categories.build
    @categories = @current_practice.categories.all
    @procedure = @current_practice.procedures.build
end

В представлении находится список со всеми текущими категориями и форма для создания новой. В модели категории есть проверка (validates_uniqueness_of: name).

Действие создания:

    def create_category
    @category = @current_practice.categories.build(params[:category])
    if @category.save
        flash[:notice] = "New category created: <i>#{@category.name}</i>"
        redirect_to :action => "categories_and_procedures"
    else
        ##Duplicate code!!!!!!
        @prefs = @current_practice.preferences

        @category = @current_practice.categories.build
        @categories = @current_practice.categories.all
        @procedure = @current_practice.procedures.build
        ##Duplicate code!!!!!!
        render :action => "categories_and_procedures"
    end
end

Есть ли способ, которым я могу переместить его в функцию, которую я могу вызвать? Helper? Фильтры? Я не знаю.

Спасибо!

1 Ответ

1 голос
/ 13 февраля 2010

Просто напишите:

def create_category
  @category = @current_practice.categories.build(params[:category])
  if @category.save
    flash[:notice] = "New category created: <i>#{@category.name}</i>"
    redirect_to :action => "categories_and_procedures"
  else
    categories_and_procedures
    render :action => "categories_and_procedures"
  end
end

Будет выглядеть лучше, если вы добавите метод установки:

def setup_object
  @prefs = @current_practice.preferences

  @category = @current_practice.categories.build
  @categories = @current_practice.categories.all
  @procedure = @current_practice.procedures.build
end

и позвоните по номеру categories_and_procedures и create_category.

...