2013-09-03 2 views
0

저는 Rails 2 웹 사이트를 다시 작성하고 있습니다. 지금은 오류가 발생합니다. 값이 .nil 대신 공백으로 제출되기 때문입니다. 그러나 그것을 유지하려는 나의 시도는 효과가없는 것으로 보인다. 당신이 제공해야하는 도움에 감사드립니다. 나는 start_masterlocation_id이 존재하는 경우이 숨겨진 필드에 값을 추가 jQuery를 가지고Rails가 내 양식에서 비어있는 경우 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 

Make blank params[] nil

에 따라 모델에서

. 존재하지 않을 때 필드 속성을 제거하는 jQuery도 있습니다.

마지막으로 다음은 오류를 던지고있는 컨트롤러 부분입니다. 이것은 Newsavedmap의 컨트롤러가 아닌 폼 (Maptry)을 보유하고있는 페이지의 컨트롤러입니다. 나는 @ newsavedmap.id, @ newsavedmap.mapname 및 @ newsavedmap.optimize 행을 삭제해야한다고 생각한다. 이제는 폼 핸들러를 사용할 것이지만이 오류와 관련이 없다고 생각한다.

컨트롤러

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 [email protected]_masterlocation_id.nil?  
    @start_name = Masterlocation.find(:first, :conditions => {:id => @newsavedmap.start_masterlocation_id}).name 
    end 
    if [email protected]_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 

start_masterlocation_id 데이터베이스에 존재하는 경우가 발생하지 않습니다 오류가 발생했습니다.

undefined method `name' for nil:NilClass 
+0

여기서 inst_name은 컨트롤러에서 호출됩니다. 나는 선언을 보지 않는다. – Raghu

+0

params [: newsavedmap]이 컨트롤러에 무엇을 표시하는지 알려주실 수 있습니까? – Raghu

+0

Raghu, 오타였습니다. 위에 고정. "당신이 의미하는 것이"params [: newsavedmap]이 컨트롤러에 표시되는 것 "이라는 것이 확실하지 않지만 Maptry 컨트롤러의 전체 섹션을 추가했습니다. 필요한 정보가 있습니까? – KDP

답변

0

나는이 문제를 무시함으로써 이것을 풀었다. 대신, 나는 사용했다

[email protected]_masterlocation_id.blank? 

이 값은 레코드의 데이터가 비어 있는지 확인한 다음 수행하거나하지 않습니다. 분명히 이로 인해 원치 않는 "빈"데이터가 내 데이터베이스에 남게되어 이상적인 것은 아니지만 프로젝트를 진행하는 데 도움이되었습니다. 무의미한 문제를 직접적으로 다루는 응답에 감사 드리며 레일스가 양식의 빈 데이터를 무시하는 방법을 알려주십시오.

관련 문제