2014-08-27 2 views
0

Ransack 보석을 사용하여 모델의 검색 양식을 설정하고 있습니다. 모델에는 문자열로 저장된 :size 필드가 있습니다. "lte and gte"를 사용하여 비교 검색을하고 싶습니다. 어떻게 ransack으로 검색 할 때이 필드를 정수로 형변환 할 수 있습니까?Ransack in Rails에서 정수로 검색 문자열

답변

0

문자열의 길이를 반환하는 간단한 메서드를 설정해 보았습니까?

def size_length 
    size.length 
end 

그런 다음 험락은 Model.search(:size_length_lteq => comparison) 일 수 있습니다?

또한 맞춤식 일치 프로그램은 무엇입니까? 이 방법이 효과가 있을지는 모르지만 한 번 볼 가치가있는 내용 일 수 있습니다.

# config/initializers/ransack.rb 
Ransack.configure do |config| 
    config.add_predicate 'string_lteq', 
    arel_predicate: 'lteq', 
    formatter: proc { |v| v.length }, 
    validator: proc { |v| v.present? }, 
    type: :string 
end 
+0

어떻게 도움이 될지 모르겠습니다. "5"의 길이는 1이고, "9"의 길이도 1입니다. – GSto

+0

Ah. 그래서 당신은 실제로 문자열을 서로 비교하지 않고 숫자를 가지고 있습니다. 귀하의 질문에서 그것을 잡지 않았다. – tehfailsafe

+0

일반적인'lteq'와'gteq'를 사용할 수없는 이유가 있습니까? ' "5"< "1" => false'는 문자열로도 올바르게 반환되어야합니다. int로 변환 할 필요가 없습니다. – tehfailsafe