2013-10-28 4 views
1

내 .html.erb 파일에 코드를 작성했지만 내 컨트롤러에이 코드를 쓰는 것이 더 좋을 것이라고 생각하십니까? 이 코드는 모든 이름을 반환합니다. 태그 이름을 한 번만 가져 오는 방법을 알아 내려고하고 사용자가 이미 사용 된 태그 이름을 입력하면 다시 표시되지 않습니다. Enumerable#flat_mapArray#uniq를 사용루비에서 여러 번 나타나는 항목에서 한 번 항목을 표시하는 방법

<ul> 
    <% @pictures.each do |pic| %> 
    <% pic.tags.each do |tag| %> 
     <li> 
     <%= tag.name %> 
     </li> 
    <% end %> 
    <% end %> 
</ul> 
+0

@pictures 값은 어떻게 얻습니까? DB에서? – shiva

+0

예 db에서 – user2914144

+0

지금은 입력 한 모든 항목을받습니다 – user2914144

답변

1

:

<ul> 
    <% @pictures.flat_map { |pic| pic.tags.map(&:name) }.uniq.each do |name| %> 
    <li> 
    <%= name %> 
    </li> 
    <% end %> 
</ul> 

Example

+0

항목이 여전히 – user2914144

+0

@ user2914144 인 해답을 업데이트했습니다. – falsetru

0

를 사용하여 사용자가 입력 수집 된 모든 항목에 대한 Array#- 방법.

1
<ul> 
    <% @pictures.collect{|x| x.tags.uniq}.flatten.uniq.each do |tag| %> 
     <li> 
     <%= tag.name %> 
     </li> 
    <% end %> 
</ul> 
1
<ul> 
     <% @pictures.each do |pic| %> 
    <% pic.tags.uniq_by(&:name).each do |tag| %> 
     <li> 
     <%= tag.name %> 
     </li> 
    <% end %> 
    <% end %> 
0

이 당신이 태그 값을 저장하는 방법을 기준으로, 내부에 사용자가 태그의 배열이 UNIQ 할 수 있도록해야한다 방법을 저장합니다.

관련 문제