2014-01-22 3 views
0

저는 최근에 새로운 프로젝트에 레일을 사용하여 가능한 한 체계적으로 유지하려고했습니다. 사람들이하지 말아야 할 것 중 하나는 모델을 뷰에서 직접 사용하는 것입니다.헬퍼에서 모델을 사용하는 것이 맞습니까?

그러나 내가보기에 들어갔습니다해야 할 항목의 다양한 목록을 가지고 있고 그것은 같은 인스턴스 변수의 긴 목록을 가지고 무의미한 것 같다

@admin_list = User.all.map {|x| {id: x.id, name:x.name}} 

그래서 내가 도우미 메서드에 위 넣어 :

def admin_user_list 
    User.all.map {|x| {id: x.id, name:x.name}} 
end 

도우미 클래스에서 모델을 사용해야합니까?

+0

나는 이러한 작업을 위해 데코레이터를 선호합니다. – dennis

답변

1

네, 그래도 괜찮아요. 그러나 도움이되는 수많은 메소드를 사용하는 경우, "발표자"클래스 또는 "계산"클래스로 별도의 클래스로 구성하는 것이 좋습니다. 귀하의 신청서가 어디로 향하고 있는지에 대한 확실한지도가 있다면 계속해서 그렇게하십시오.

어느 쪽이든, 인스턴스 변수를 정의 할 때 map과 같은 메소드를 사용해서는 안된다는 의미에서 정확합니다. (나는 그것이 컨트롤러에 같은 정의 있다고 생각 것?)

어쨌든, 당신은 당신이 위의 지정된 일을하기를 원한다면,

def admin_user_list 
    User.all.map {|x| {id: x.id, name:x.name}} 
end 

정말 (사용자 모델에서)해야한다 : 그렇지 않으면 당신은 호출 될

def self.admin_user_list 
    all.map {|x| {id: x.id, name:x.name}} 
end 

사용자 = User.find (1)

user.admin_user_list. 사용자 별 관리 목록이 없으면 이해할 수 없습니다.이 경우 내 성명서를 철회합니다.

별도의 클래스의 예 :

class Admin 
def user_list 
    User.all.map {|x| {id: x.id, name:x.name}} 
end 

@admin_list = Admin.user_list 
3

이 꽤 자기 의견을 고집하는 질문이지만, 개인적으로는 사용자 클래스의 수업 방법으로이 문제를 정의하고에 User.admin_list

로 부를 것이다 당신이하고있는 것처럼 당신의 객체를 실제로 해시로 매핑하는 것이 필요한지 스스로에게 물어봐야 할 것입니다.

+0

'당신이하고있는 것처럼 객체를 해시에 매핑하는 것이 실제로 필요한지 자문해야합니다. ' ID와 이름 만 있기 때문에이 상황에서해야 할 일이 무엇인지 모르겠 음 – andy

+0

전체 목적?왜 당신이 그것의 속성의 서브셋만을 사용하고 있기 때문에 당신이 그것을 해쉬로 가져 가야하는지에 대한 어떠한 이유도 보이지 않습니다. –

+0

좋은 지적. 어리석은 순간의 하하 – andy

0

도우미 클래스 내에서 모델을 사용하지 마십시오. 두 가지 작업을 수행 할 수 있습니다 .... 1.) 먼저 모델 클래스 메서드를 사용하고 Niels B의 제안에 따라 User.admin_list를 호출 할 수 있지만 모델 클래스 이름 User를 언급해야하므로 사용하지 말 것 코드보기.

2. 컨트롤러에 메소드를 작성하고 도우미 메소드로 선언해야 모델 클래스 이름을 언급하지 않고 도우미 메소드를 직접 호출 할 수 있습니다. 다음과 같은 것입니다 ...

class ApplicationController < ActionController::Base 
helper_method :admin_list 

def admin_list 
    User.all.map {|x| {id: x.id, name:x.name}} 
end 
end 
+0

나는 그에게 그 계급을 언급하도록 말하지 않았다. 컨트롤러의'@admin_hashes = User.admin_list'가 저에게 효과적입니다. 그러나 모델 인스턴스를 해시로 매핑하는 팬이 아닙니다. –

관련 문제