2011-04-20 2 views
0

, 당신은 나에게 이러한 목표를 달성하기 위해 더 나은 방법을 제안 할 수 있습니다하십시오 : 내 레일 응용 프로그램 내용에서레일 3 - 더 나은 방법은 ... 나는 초보자입니다!

많은 언어로 삽입 할 수 있습니다

@infos = @activity.infos 
@infos.each do |info| 
    @activity.name = info.title if info.language_id == 1 
end 

편집을,하지만 그들 중 하나에 표시됩니다. 다른 언어는 XML 출력으로 만 사용됩니다. 그러나 나는이 방법을 사용하고 있습니다 주요 원인은 "name"속성없이 내가 이런 컬렉션을 만들 수 없습니다 것입니다 :없이

<%= collection_select(:event, :activity_id, @activities, :id, :name) %> 

는이 작업을 수행하는 방법 저를 제안 할 수는 " 내 활동에 "이름"속성이 있습니까?

감사합니다.

+1

논리적으로 이상하게 보입니다. 활동과 관련된 마지막 정보의 language_id를 기반으로 활동의 이름을 설정하고 있습니까? 당신이하려는 일을 명확히 할 수 있습니까? –

+0

더 나은 방법은 무엇입니까? –

+0

나는 논리적으로 더 나은 것을 의미한다! 내 길은 분명히 불합리했다. ;-) – Abramodj

답변

3

다음과 같이 할 수 있습니다.

info = @activity.infos.select{|info| info.language_id == 1}.last 
@activity.name = info.title 
2

@activity.name = @activity.infos.find(:first, :conditions => { :language_id => 1 }).title 

글쎄, 당신은 반복을 잃을 수

...하지만 그건 당신이 (현실 세계) 결과를 얻을 수 있습니다 보장하지 않습니다. 그래서 :

info = @activity.infos.find(:first, :conditions => { :language_id => 1 }) 
@activity.name = info.title unless info.nil? 

그러나 코멘트에서 언급 한 바와 같이이 이상한 방법은이 - 당신의 앱 구조적으로 뭔가 문제가있을 것 같아/데이터 당신은 값이 방법을 지정하려는 경우.

3
다른 사람과 동일

하지만 레일 (3)에 언급 된 다른 사람으로

@activity.name = @activity.infos.where(:language_id => 1).first.title 

에서 사용할 년대 ARrel 구문을 사용하여 ... 당신은 당신의 디자인을 재고 할 수 있습니다. 이렇게하려는 이유에 대해 더 자세하게 설명하면이 문제를 야기하는 기본 디자인을 도울 수 있습니다.