2011-04-30 4 views
0

중첩 된 양식이 있습니다. 양식은 list : name 및 a : month 속성이있는 모델입니다. 이 목록 모델에는 : name 및 : amount 속성을 가진 호출 된 item 내부에 중첩 된 다른 모델이 있습니다. 목록에는 많은 항목이 있고 항목은 목록에 속합니다.Rails 3에서 다른 항목의 변수 값을 표시 하시겠습니까?

@amount_total = Item.where(:list_id => @list).sum("amount") 
내 목록 쇼 페이지에서이 변수를 호출

하고 모든 항목의 합계를 보여줍니다 :이 같은 항목 금액의 모든 합계 내 컨트롤러의 변수 (즉, 가장 좋은 방법은 있는지 확실하지)를 생성 현재 목록 ID의 금액입니다. 내가하고 싶은 일은 현재 목록 합계를 이전에 입력 한 목록과 비교할 수 있습니다. 이런 변수를 사용할 수 있습니까? 그렇다면 어떻게? 그렇지 않다면 어떻게해야합니까?

편집 내가 가지고있는 컨트롤러 내 show 액션에서

(아래 답변에 따라) 다음

@list = List.find(params[:id]) 

하지만, 변수 @previous_list을 만들려면이 같은 뭔가가 필요 :

@previous_list = List.order("id").where("id<? AND user_id=?", self.id, self.user_id).last 

동일한 사용자이지만 이전에 입력 한 목록을 찾아야합니다. 그러나이 방법으로 변수에 넣을 때 정의되지 않은 메서드 인 "user_id"가 있다고합니다. 생각?

+0

사용자 모델에 List와 belongs_to 관계가 있습니까? List는 User와 has_many 관계가 있습니까? 또한 id를 사용하지 않고 create_at를 사용하여 쿼리를 정렬하려고합니다. Id는 항상 연대 기적 인 것은 아니지만, created_at은 항상있을 것입니다. – ipd

답변

0

IPD의 대답은 솔루션에 가장 가까운 날 잡았어, 여기 내 특정 상황에 그것을 완료하는 방법입니다

이전 목록 총 표시하려면 - 목록 도우미 다음에

def prev_total(list) 
list and list.items.sum("amount") 
end 

을 list.rb 모델 : 내 목록 show.html.erb 파일에서 다음

def previouslist 
    self.class.order("id").where("id<? AND user_id=?", self.id, self.user_id).last 
end 

:

<%= prev_total(@list.previouslist) %> 

잘 작동합니다.

1

당신은 아마 당신의 목록 모델에이 논리를 이동하고,처럼, 거기에 TOTAL_AMOUNT 접근을 만들어야합니다

def total_amount 
    Item.where(:list_id => self.id).sum("amount") 
end 

그런 다음 컨트롤러에서 당신은 단지 @previous_list 변수로 이전 목록을로드해야합니다 . 귀하의 의견에

당신은 할 수있을 것입니다 :

<%= @list.total_amount %> 
<%= @previous_list.total_amount %> 

이안.

+0

빠른 피드백에 감사드립니다. 어쩌면 멍청한 질문에 대해 미안하지만, @list 및 @previous_list 변수를 어디에 어떻게 정의 할 수 있습니까? – FattRyan

+0

좋은 질문입니다! 컨트롤러에서 '쇼'동작을 수행하게됩니다. 당신이 그것을 구현하는 방법은 당신의 의도에 달려 있습니다. 이전 목록을로드하고 싶은 것은 무엇입니까? 이전에 무슨 뜻이야? – ipd

+0

고마워, 거의 다 왔어. 아직도 뭔가 빠져있다.나는 그것을 위의 편집에 넣었다. – FattRyan

관련 문제