我在我的应用上做了一些测试。
我有一个接受城市的表单(由城市名称自动完成)和一些日期。
因为我有自动填充功能,所以我必须通过显示名称查找城市来获取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 :(得分: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