Why isn't Rails recognizing nil if blank in my form?

偶尔善良 提交于 2019-12-25 07:09:38

问题


I'm reworking a Rails 2 website. Right now, I'm getting an error, and I think it's because a value is being submitted as blank instead of .nil. However, my attempts to keep it nil don't seem to be working. I appreciate any help you have to offer.

From Model, based on Make blank params[] nil

    NULL_ATTRS = %w( start_masterlocation_id )
    before_save :nil_if_blank

    protected

    def nil_if_blank
    NULL_ATTRS.each { |attr| self[attr] = nil if self[attr].blank? }
    end

View

I've got jQuery that adds a value to this hidden field when a start_masterlocation_id exists. I've also got jQuery that removes the field attribute when it does not exist.

    <%= hidden_field :newsavedmap, :start_masterlocation_id, :id => "start-masterlocation-id-field" %>

Finally, here is the part of the controller that is throwing the error. This is the controller for the page that holds the form (Maptry), not the controller for Newsavedmap. I think I have to delete the @newsavedmap.id, @newsavedmap.mapname, and @newsavedmap.optimize lines now that I'm going with form handlers, but I don't think that's related to this error.

Controller

    def maptry
    @itinerary = Itinerary.find(params[:id])
    if @itinerary.user_id == current_user.id
    respond_to do |format|
    @masterlocation = Masterlocation.find(:all)
    format.html do
    end
    format.xml  { render :xml => @masterlocation }
    format.js do
    @masterlocation = Masterlocation.find(:all)
    render :json => @masterlocation.to_json(:only => [:id, :nickname, :latitude, :longitude])
    end
    end
    if params[:newsavedmap_id]
    @newsavedmap = Newsavedmap.find(:first, :conditions => {:id => params[:newsavedmap_id]})
    @waypoint = Waypoint.find(:all, :conditions => {:newsavedmap_id => params[:newsavedmap_id]})
    @newsavedmap.id = params[:newsavedmap_id]
    @newsavedmap.mapname = Newsavedmap.find(:first, :conditions => {:id => params[:newsavedmap_id]}).mapname
    @newsavedmap.optimize = Newsavedmap.find(:first, :conditions => {:id => params[:newsavedmap_id]}).optimize
    if !@newsavedmap.start_masterlocation_id.nil?       
    @start_name = Masterlocation.find(:first, :conditions => {:id => @newsavedmap.start_masterlocation_id}).name
    end
    if !@newsavedmap.end_masterlocation_id.nil?     
    @end_name = Masterlocation.find(:first, :conditions => {:id => @newsavedmap.end_masterlocation_id}).name
    end
    else
    @newsavedmap = Newsavedmap.new  
    end
    else
    redirect_to '/'
    end
    end

Error This does not occur when a start_masterlocation_id is present in the database.

    undefined method `name' for nil:NilClass

回答1:


I solved this by ignoring the nil problem. Instead, I used

    !@newsavedmap.start_masterlocation_id.blank? 

This evaluates whether the data in the record is blank and then either does or doesn't do something. Obviously, this results in unwanted "blank" data being left inside my database, so it's not ideal, but it helped me move forward with the project. I'd appreciate any responses that deal directly with the nil issue and tell me how to have Rails ignore blank data in a form.



来源:https://stackoverflow.com/questions/18603320/why-isnt-rails-recognizing-nil-if-blank-in-my-form

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!