2011-11-06 2 views
2

무겁고 중복 된 것처럼 컨트롤러를 청소하려고합니다. 이러한 논리를 내 모델로 옮기는 방법에 대한 도움을 주시면 감사하겠습니다. 여기에 대한 도움을 주셔서 감사합니다 - 코드가 아래 index 액션 내입니다 :레일 - 컨트롤러 로직을 모델로 옮기기

case params[:find_by] 
    when 'topic' 
    nuggets = Nugget.where(['topic = ?', params[:topic_name]]) 
    @nuggets = nuggets.paginate(:page => params[:page],:per_page => 15) 
    @title = nuggets.first.topic 
    when 'audience' 
    nuggets = Nugget.where(['audience = ?', params[:audience_name]]) 
    @nuggets = nuggets.paginate(:page => params[:page], :per_page => 15) 
    @title = nuggets.first.audience 
    else 
    @nuggets = Nugget.paginate(:page => params[:page], :per_page => 15) 
end 
+0

은 같은 것 같은데 MetaSearch, MetaWhere 또는 Ransack이 여기에서 도움이 될 수 있습니다. –

답변

1

은 내가 모델로 이동할 것입니다 완전히 확실하지 않다. 아마 컨트롤러의 개인용 유틸리티 메소드로 옮길 것입니다.

case params[:find_by] 
    when 'topic' 
    nuggets = Nugget.find_by_topic(params[:topic_name]) 
    @title = nuggets.first.topic 
    when 'audience' 
    nuggets = Nugget.find_by_audience(params[:audience_name]) 
    @title = nuggets.first.audience 
    else 
    nuggets = Nugget.all 
end 

@nuggets = Nugget.paginate(:page => params[:page], :per_page => 15) 

또 다른 옵션은 다른 찾기에 대한 경로를 만드는 것입니다. 그게 가치가 있든 없든간에. find_by 로직을 모델로 옮기거나 send을 사용하여 주제/잠재 고객의 차이를 약간 줄이고 다시 시도하면 가치가있는 것보다 더 많은 문제가있는 것 같습니다.

더 많은 Rails-y 사람들이 질문에 대해 생각해보고 싶습니다.

+0

감사합니다. Dave - 내가해야 할 일을 토대로 별도의 경로를 만들 계획입니다. 나는 그것과 함께 조금 놀았고, 그것이 나의 최고의 선택 인 것을 알았다 - 입력에 감사드립니다! – Gavin

+0

@Gavin 문제 없습니다. 때로는 더 좋거나 나쁘지 만, 가장 깨끗하고 유지하기 쉬운 방법입니다. –

1

모델

def self.topic(topic_name) 
    where(:topic => topic_name) 
end 

def self.audience(audience_name) 
    where(:audience => audience_name) 
end 

이 추가 컨트롤러에 당신은 관객 및 주제를 같은 매개 변수 키를 사용해야 만합니다이

def index 
    if params[:find_by] 
     nuggets = Nugget.send(params[:find_by].to_sym)(params[:name]) 
     @nuggets = nuggets.paginate(:page => params[:page], :per_page => 15) 
    else 
     @nuggets = Nugget.paginate(:page => params[:page], :per_page => 15) 
    end 
    @title = @nuggets.first.send(params[:find_by].to_sym) 
end 

로 교체

+1

나는 순진한 해결책보다 덜 분명하고 읽기가 어렵다는 것을 알게되었습니다. (그래서 나는 대답에만 답했습니다.) –

관련 문제