2012-03-28 3 views
0

내가 다른 이미지 버전을 표시 할거야 IMAGE_TAG :주기()

첫 번째 기사 : 큰 배너

초 : 작은 오른쪽으로 떠 배너/

그래서 왼쪽, 먼저 : 주기()를 사용하지만 그나마 일 :

= cycle(image_tag(banner_big), image_tag(banner_small) 

또는

= image_tag(cycle(banner_big_path, banner_small_path)) 

첫 번째 이미지 만 표시됩니다.

하나를 만들려면 적절한 방법이 있습니까?

+1

일부 페이지에서는 루프 내에서'cycle()'을 실행해야하므로 각 루프 사이클에서 다음 값을 반환하고 모든 값은 해당 페이지에 동시에 표시됩니다. 달성하고 싶습니까? –

+0

같은 페이지에 기사가 여러 개 있고 큰 이미지를 표시하고 싶거나 작은 이미지를 표시하려면 일부를 원하십니까? banner_big_path와 banner_small_path의 값이 각 기사마다 다른가요? (그렇다면 어디서 오는 것입니까?) –

+0

예, 같은 페이지에 여러 기사가 있습니다. 기사에는 carrierwave에서 다른 이미지 네임 스페이스 (small_ big_ ...)를 가진 일러스트레이션의 다른 버전이 있지만 '순환'하지 않은 경우, 두 개의 예에서 첫 번째 이미지 (banner_big) 만 각 기사에 표시되며 유일한 '주기 '페이지에. 작은 모양 /local_uploads/actu/slider/8/banderolle_shenmue-2.jpg & Big /local_uploads/actu/slider/8/big_shenmue-2.jpg – tree

답변

2

귀하의 문제는 당신이 문자열의 동일한 세트 각각의 시간주기를 호출하는 기대 레일입니다 :

# application_helper.rb 
def session_banner_index 
    session[:banner_index] || 0 
end 

def session_banner(*list) 
    list[session_banner_index % list.length] 
end 

# application_controller.rb 
def increment_session_banner_index! 
    session[:banner_index] = (session[:banner_index] || 0) + 1 
end 

이 도우미 메서드는 요구 된 인터페이스에 근접. 현재 각 순환 호출마다 다른 문자열 쌍을 전달하므로 레일은 매번 사이클을 재설정합니다. 새로운 사이클은 항상 첫 번째 값으로 시작하므로 결과는 사용자가 설명합니다.

가정 당신의 기사는 대체 이미지 경로를 반환해야

article.send(cycle("big_path","small_path")) 

같은 것을 small_path, big_path라는 방법을했다.

+0

좋은 하나! 그래서 나는 = image_tag를 추가했다. (사이클 ("big_path", "small_path", : name => "pic")) : class =>주기 ("big", "small", : name => "classpic ")) http://i.imgur.com/NCyl2.png처럼 보입니다. – tree

0

session 기능을 사용하여 색인을 거기에 저장하고 사용할 수 있습니다. 예를 들어 :

= image_tag(session_banner(banner_big, banner_small)) 
관련 문제