2014-10-06 3 views
0

여기 조금 화가납니다. 아래로 미세마지막 값을 사용하는 루비 루프 만

@sport = Sport.find(params[:sport]) 
@activities = Activity.where("sport_id = ?", @sport) 

@activites 출력 : 예측으로

<% @activities.each do |a| %> 
    <%= a.id %> 
<% end %> 

2 개 값을 도시.

for a in @activities 
    @facilities = Facility.where("id = ?", a.facility_id) 
end 

내 출력을 위해 :

<% @facilities.each do |f| %> 
    <%= f.id %> 
<% end %> 

는 1 개 값을 반환 내가 (컨트롤러에) 쓸 때

내 문제이다. 위 활동의 ​​각각이 다른 시설에 속하기 때문에 2 개의 값을 보여 주어야합니다. 나는 for 루프와 관련이 있거나 @facilities를 정의 할 때 하나의 값만을 등록한다고 생각한다.

어떤 도움이 필요합니까? 고마워요 :)

+0

가'for'를 사용하지 마십시오 : 전에했던 것처럼 그런 다음보기에서 계속

@facilities = @activites.map do |a| Facility.where("id = ?", a.facility_id) end 

:

대신, 시설의 배열을 얻기 위해 map를 사용할 수 있습니다 목표에 따라'each '또는'map'을 사용하십시오. 후자는 관용적 인 루비입니다. –

답변

4

문제는 당신이 루프의 각 반복에 @facilities을 다시 할당하는 것입니다. 나는 당신이 뭔가 더 같이 할 생각이 더 바람직하게는, 당신이 정의한,

@facilities = @activities.map {|a| Facility.find(a.facility_id) } 

로 작성 될 수 있지만

@facilities = [] 
for a in @activities 
    @facilities << Facility.find(a.facility_id) 
end 

에 대한 협회 : 시설

@facilities = @activities.map {|a| a.facility} 
+0

Ahhhh 내가 뭘 찾고 있었는지. 나는 문제를 알았지 만 해결책이 없었다. 감사합니다! – MikeHolford

1

당신에게 ' 오른쪽 :

... @faci lities 그것은 단지 하나의 값을 등록합니다. 이 루프의 각 반복에 대해

:

당신이 @facilities에서 이전 값을 건드리지하고 새 것으로 교체하고
for a in @activities 
    @facilities = Facility.where("id = ?", a.facility_id) 
end 

. 루프가 끝나면 Facility.where("id = ?", a.facility_id)의 최종 값만 유지됩니다.

<% @facilities.each do |f| %> 
    <%= f.id %> 
<% end %> 
관련 문제