在强参数中使用合并,NilClass错误

时间:2014-09-30 13:46:42

标签: ruby-on-rails

我在我的应用上做了一些测试。

我有一个接受城市的表单(由城市名称自动完成)和一些日期。

因为我有自动填充功能,所以我必须通过显示名称查找城市来获取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

1 个答案:

答案 0 :(得分: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