2011-03-31 6 views
1

는 지금은 내 비디오 쇼보기이 있습니다고유 항목 만 표시하려면 어떻게해야합니까?

<% @video.topics.each do |topic| %> 
    <%= topic.name %> 
<% end %> 

문제는 비디오가 동일한 주제의 두 가지와 관련되어있는 경우,이 두 항목을 보여주고 있다는 점이다. 고유 한 주제를 보여줄 수 있도록이 문제를 어떻게 해결할 수 있습니까?

@video.topics.uniq.each do |topic| 
+0

비디오가 두 개의 주제와 관련되어있을 때 데이터가 유효한 것으로 간주됩니까? 당신은 dups을 방지하기 위해 쓰기 측면에 뭔가를 쓸 수 있습니까? – Larsenal

+0

그래, 아직 유효성이 검증되지 않았습니다 ...이를 위해 구현해야합니까? 사용자가 dup을 추가하여 오류가 발생하는 것을 원하지 않습니다. 그냥 자동으로 실패하기 위해서입니다. –

답변

4

, 당신은 주제의 배열에 #uniq를 호출 할 수 있습니다 주제별 결과. 이 작업은 find.group 또는 Ruby group_by 명령을 사용하여 수행 할 수 있습니다. 나는 그것이 당신을 위해 일해야한다고 생각합니다.

+0

그래요, 아직 유효성 검사가 없습니다 ... 이것을 구현해야합니까? 아니면 #uniq를 사용해야합니까? 사용자가 dup을 추가하여 오류가 발생하는 것을 원하지 않습니다. 자동으로 실패하는 경우에만 사용하십시오. –

+0

@ Justin : 모델에 유효성 검사 및 정리를 추가하고 'uniq'로 필터링하면 근본적인 문제가 해결됩니다. –

+0

네, 확실히 모델에 검증을 추가하십시오! 그리고 만약 당신이 정말로 이것을 당신의 사용자를 위해 "조용히"하고 싶다면 데이터베이스 삽입에 조건을 붙이십시오 ...'@video.topics << topic without @ video.topics.include? (topic)'- 그렇게하면 효과가 있다고 생각하고 중복 된 데이터베이스 항목을 피할 수 있습니다. –

0

난 당신이 그룹에 그룹을 사용할 수 있다고 생각합니다 : 당신은 아마 이런 일이 발생을 방지하기 위해 모델 (들)의 일부를 검증 할 수 있어야하지만

관련 문제