2011-05-13 4 views
0

문자열에서 "nil"을 얻는 방법을 궁금합니다 : NilClass? Ruby 문자열 "nil"을 nil로 설정합니다. NilClass nil (nil.inspect의 반대)

nil.inspect -> "nil"

내가 좋아하는 뭔가를 할 :

"nil".to_nil -> nil

업데이트 :

가에 쉽게 우는 내가 코멘트에 쓰고있는

:

params[:form].each_pair{|k,v| fields[k] = k.to_s.include?('_id') ? v.to_nil : v

params[:form].each_pair{|k,v| fields[k] = k.to_s.include?('_id') ? (v == "nil" ? nil : v) : v }

+5

왜? 왜 당신이 이것을하고 싶습니까? 이것은 발에서 자신을 쏘려고하는 것처럼 들립니다. –

+0

db에는 기본값이있는 필드가 있지만 때로는 nil 값으로 필드를 만들어야합니다. 폼 입력에서 나는 create 문이 디폴트를 할당하기 때문에 nil 값을 보낼 수 없다. 그래서 이것을 처리 할 방법이 필요했다. 지금은 가장 좋은 해결책은 입력 값으로 "nil"을 보내고 새 레코드를 만들기 전에 params 해시를 구문 분석하고 모든 "nil"을 nil로 바꾸는 것입니다. NullClass – kfl62

답변

1

를 다시 열고 문자열 클래스를 사용하면 전 세계적으로이 기능을합니다.

class String 
    def to_nil 
    if self == 'nil' 
     nil 
    else 
     self 
    end 
    end 
end 

'nil'.to_nil # => nil 
'another string'.to_nil # => "another string" 
+0

아마도 질문이 명확하지 않았지만 이것이 내가 필요한 것입니다 :) – kfl62

3

내가 아니라, 항상 nil 때문에하는 to_nil의 지점을 참조하십시오 그래서 nil를 작성하지 않습니다. 귀하의 질문에 inspect의 역 동작 인 경우, 당신은 eval를 사용할 수 있습니다

eval("nil") #=> nil 
+0

String.eval이 Rails일까요? – steenslag

+0

@steenslag : 아마도 레일스 콘솔을 점검했습니다. 표준 eval로 전환하십시오. – tokland

0

당신은 예를 들어 문자열 "전무"평가 후면 수 :

=> eval("nil").nil? 
irb> true 
관련 문제