Как удалить избыточный код в контроллере Rails? - PullRequest
0 голосов
/ 25 февраля 2012
def new
  @user = User.find(session[:this_user])
  @message = Message.new    
  @people= People.order("is_active DESC, first_name, last_name")
end

Когда действие create не проходит проверку, мне нужно снова установить вышеупомянутые переменные, создавая действие, которое выглядит следующим образом:

def create
  @message = Message.new(params[:message])  
  if @message.save
    redirect_to(messages_path, :notice => 'Message was successfully created.') 
  else
    @user = User.find(session[:this_user])
    @message = Message.new    
    @people= People.order("is_active DESC, first_name, last_name")
    render :action => "new" 
end

конец

Как правильно удалить избыточный код (и высушить его)?

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

Rails 3.07, Ruby 1.9.2

1 Ответ

2 голосов
/ 25 февраля 2012

Поместите @user = User.find(session[:this_user]) в before_action примерно так:

class SomeController
  before_action :set_session_user, :only => [:new, :create]
  def set_session_user
    @user = User.find(session[:this_user])
  end
end

И @people= People.order("is_active DESC, first_name, last_name") может быть scope примерно так:

class People < ActiveRecord::Base
  scope :sorted_by_active_and_name, -> { order("is_active DESC, first_name, last_name") }
end
People.sorted_by_active_and_name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...