2009-05-17 5 views

답변

1

나는 사용자가 제공 한 데이터를 다루고 있기 때문에 eval에서 멀어 질 것이다. 단순한 case 문을 사용하는 것일까 요? 이렇게하면 자신이 제공하는 데이터의 유효성을 확인할 수 있습니다.

2

나는 named_scopes를 통해 결과를 사용자 중심 필터링하도록 설계된 매우 훌륭한 acts_as_filter 플러그인을 제안합니다.

http://github.com/tobyhede/acts_as_filter/tree/master

평가가 사용하는 괜찮 - (? 나는 종종 단지 배열 및 테스트 accepted_values.include으로 일부 값을 연결 (매개 변수))하지만, 허용/예상 값에 대해 유효성 확인

2

평가 꽤 나쁜 생각입니다. 그러나 #send는 완벽합니다. 본질적으로 더 안전하며 eval보다 빠릅니다 (이해함).

Product.send(params[:scope]) 

는, 내가 명시 것, 체인 범위가 함께 원하는 쿼리를 구축하는 당신이주는 예를 들어

0

을 :)해야한다 : 만약

scope = Post 
scope = scope.random if params[:scope] == 'random' 
@posts = scope.find(:all, ...) # or paginate or whatever you need to do 

을 PARAMS [ : scope]는 'random'이 아니며, Post.find()를 호출하는 것과 같습니다. 그렇지 않으면 Post.random.find()를 수행하고 있습니다.

find_by_filter가 꽤 도움이되는 것처럼 보입니다. 훨씬 얇은 g.

이 패턴을 사용하면 상호 배타적 인 것이 아닌 을 지원해야하는 경우 여러 스코프를 검색어에 결합 할 수 있습니다. ?

scope = scope.only_monsters if params[:just_monsters] == 1  
scope = scope.limit(params[:limit].to_i) unless params[:limit].to_i.zero? 

그래서하기/게시물 범위 = 임의 & just_monsters = 1 개 & 제한 = 5 당신을 줄 것이다 : 나는 검색에서 건너 온

Post.random.just_monsters.limit(5).find(:all, ...) 
관련 문제