플래시 메시지에 링크를 포함시키기 위해 어떤 접근 방식을 취합니까?

StackOverflow https://stackoverflow.com/questions/1332013

  •  19-09-2019
  •  | 
  •  

문제

내장 링크가 포함 된 플래시 메시지 (통지, 오류, 경고 등)를 가질 수있는 기능은 사용자 상호 작용 관점에서 좋습니다. 그러나 컨트롤러의 플래시 메시지 내부에 앵커 태그를 포함시키는 것이 더럽습니다.

이와 같은 플래시 메시지가 유용성에 적합하다고 가정 해 봅시다*:

내장 된 링크가 포함 된 플래시 메시지 통지 http://img.skitch.com/20090826-xbsa4tb3sjq4fig9nmatakthx3.png (빌린 dailymile.com)

컨트롤러와보기 사이에서 어떤 전술을 취 하시겠습니까?

도움이 되었습니까?

해결책

내가 이것을 공유 할 것이라고 생각했는데, 찾은 답변 이후 나는 다른 곳에서 찾고 있었다.

레일 3.1에서 작동합니다

flash[:notice] = "Proceed to #{view_context.link_to('login page', login_path)}".html_safe

다른 팁

글렌 길렌 그가 부르는 접근법이 있습니다 레일로 유용한 플래시 메시지.

나는 그의 코드 스 니펫을 조금 더 관용적으로 수정했다 (적어도 나를 위해).

컨트롤러는 다음과 같이 플래시를 채 웁니다.

flash[:notice]      = "Your profile was updated. %s"
flash[:notice_item] = ["Edit again?", edit_profile_path(@profile)]

그런 다음 다음과 같이 보이는 도우미가있을 수 있습니다.

def render_flash_messages(*keys)
  messages = keys.collect do |key|
    content_tag(:p, flash_message_with_item(key), :class => "flash #{key}") if flash[key]
  end.join
  content_tag(:div, messages, :id => "flash_messages") unless messages.blank?
end

def flash_message_with_item(key)
  item = flash["#{key}_item".to_sym]
  substitution = item.is_a?(Array) ? link_to(*item) : item
  flash[key] % substitution
end

보기는 단순히 다음과 같습니다.

<%= render_flash_messages(:error, :notice, :warning) %>

보기 (를 통해 flash_message_with_item Helper)는 앵커 태그를 작성하는 책임이 있지만 컨트롤러는 추가 작업을위한 선택적 리소스를 포함하여 플래시 메시지에 들어가는 내용을 관리합니다.

플래시 메시지에 전달 된 값을 기준으로 부분을 렌더링하는 도우미 방법을 만들 수 있습니다.

이것은 비슷합니다 레일 플래시의 link_to ()

# In your controller
flash[:error] = render_to_string(:partial => "sessions/login_failed_message")

# In sessions/_login_failed_message.html.erb
Login failed.  If you have forgotten your password, you can #{link_to('reset it', reset_path)}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top