2014-09-30 54 views
0

我正在做一些測試我的應用程序。使用強參數合併,NilClass錯誤

我有一個表單接受一個城市(自動完成的城市名稱)和一些日期。

因爲我有一個自動完成功能,我必須通過顯示名稱查找城市來獲得city_id。

def trip_params 
    params.require(:trip).permit(:start_date, :end_date).merge(:city_id => City.find_by_display(params[:trip][:city_id]).id) 
end 

問題是如果用戶在沒有城市的情況下獲取表單。我收到一個錯誤:

undefined method `id' for nil:NilClass 

因爲沒有找到記錄。有什麼更好的方式來構建這個,這樣我就可以在沒有城市進入的情況下重定向回'新'。

創建方法,以防萬一它的幫助。

def create 
    @trip = current_user.trips.build(trip_params) 
    if @trip.save 
     flash[:success] = "Trip to #{@trip.city.name} added." 
     redirect_to root_path 
    else 
     flash.now[:error] = @trip.errors.full_messages 
     render 'new'  
    end 
end 

回答

0
def create 
    if params[:trip][:city_id].blank? 
     flash[:error] = "some warning about the city" 
     render new 
    else 
     @trip = current_user.trips.build(trip_params) 
     if @trip.save 
      flash[:success] = "Trip to #{@trip.city.name} added." 
      redirect_to root_path 
     else 
      flash.now[:error] = @trip.errors.full_messages 
      render 'new'  
     end 
    end 
end 

def trip_params 
    if !params[:trip][:city_id].blank? 
     params.require(:trip).permit(:start_date, :end_date).merge(:city_id => City.find_by_display(params[:trip][:city_id]).id) 
    end 
end