2012-02-25 10 views
0
def new 
    @user = User.find(session[:this_user]) 
    @message = Message.new  
    @people= People.order("is_active DESC, first_name, last_name") 
end 

createアクションが検証に失敗した、私がどのように見えるアクションを作成、再度、上記の変数を設定する必要があります。Railsコントローラの冗長コードを削除するには?

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

答えて

2

はそうのようbefore_action@user = User.find(session[:this_user])を入れて:

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 
関連する問題