2013-08-04 17 views
1

我相信條件可以寫更好:如何讓這個Ruby方法更漂亮?

def update 
    if allow_update? 
    if @company.update_attributes(params[:company]) 
     flash.now[:success] = "success message" 
    else 
     flash.now[:error] = "error message" 
    end 
    else 
    flash.now[:error] = "error message" 
    end 

    render :show 
end 

我如何改寫呢?

回答

9

使用&&運營商,二if s時,可以合併爲一個:

def update 
    if allow_update? && @company.update_attributes(params[:company]) 
    flash.now[:success] = "success message" 
    else 
    flash.now[:error] = "error message" 
    end 

    render :show 
end 
0

你可以使用一些字符串插值和三元運營商縮短代碼。

def update 
    allow_update? && @company.update_attributes(params[:company]) ? result = "success" : 
    result = "error" 
    flash.now[result.to_sym] = "#{result} messege" 
    render :show 
end