2011-02-01 1 views
1

컨트롤러의 내부에서 여러 개의 메시지를 플래시 해시로 전달하고 글 머리 기호 목록과 같이 멋지게 표시하려고합니다. 이 작업을 위해 고안 한 방법은 어플리 케이션 컨트롤러에서 배열을 글 머리 기호 목록으로 형식화하는 도우미 함수를 만드는 것입니다.이 배열은 필자의 경우 flash [: success]로 전달됩니다. 내 글 머리 기호 목록이 인코딩되기 때문에 이것은 분명히 Rails Way가 아닙니다. 그 대신 얻는이다 :레일 3/컨트롤러/플래시 해시

  • 메시지 1
  • 메시지 2

내가 얻을 :

<UL> < 리 > 메시지 1 </리 > < 리 > 메시지 2 </li > </ul >

출력을 raw()하는 방법을 알아낼 수는 있을지 모르지만, 이처럼 작동하는 간단한 방법은 없습니까? 아마도 flash []에 전달할 수있는 옵션이 있습니까? 다른 것?

답변

3

render_to_string을 사용했고 비슷한 것을 달성하기 위해 도우미 대신 부분적으로 사용했습니다.

# app/controller/dogs_controller.rb 
def create 
    @dog = Dog.new(params[:dog]) 
    @messages=[] 
    if @dog.save 
    @messages << "one" 
    @messages << "two" 
    flash[:notice] = render_to_string(:partial => "bulleted_flash") 
    redirect_to(dogs_path) 
    else 
    render :action => 'new 
    end 
end 

그럼 난 당신이 내가 당신을 생각 다음 도우미를 계속해야하는 경우 다음과 같은 HTML

# http://0.0.0.0:3000/dogs 
<body> 
    <div id="flash_notice"> 
    <ul> 
     <li>one</li> 
     <li>two</li> 
    </ul> 
    </div> 
    ... 
</body> 

를 생성하는 HTML 목록

# app/views/dogs/_bulleted_flash.html.erb 
<ol> 
    <% @messages.each do |msg| %> 
    <li><%= msg %></li> 
    <% end %> 
</ol> 

플래시 메시지의 배열을 포맷 이 코드가 인코딩되지 않도록 문자열에 html_safe 메서드를 추가해야합니다 (기본적으로 3 개의 레일스). 여기에 a question showing how to use html_safe in a similar fashion

입니다.
0

Rails3을 사용하는 경우 원시 메소드를 사용해보십시오.

raw(my_html_string) 

그리고 html을 벗어날 수 없습니다. 오, 미안, 방금 마지막 문장을 읽었 어. 당신이 찾고있는 것을있을 수 있습니다 것 같습니다,이 정보를 "레일 3 플래시 메시지 문제"체크 아웃 : 보통 내가이 상황에서 귀하의 의견 및 레이아웃에 대한 자세한 정보를 요청할 것

http://www.ruby-forum.com/topic/215108

0

, 왜냐하면 스캐 폴딩은 기본적으로 flash[:success]을 표시하지 않기 때문입니다.

내가 해결할 수있는 방법은 대개 내 플래시 메시지를 완전히 다시 작성하는 것입니다. 매번 flash[:whatever] 배열을 만들고 내 레이아웃에서 알림 대신 해당 배열을 처리합니다. 플래시는 해시 일 뿐이며, 값을 설정한다는 의미입니다.

그러나 지금 설정 한 내용 (flash[:success] 안에 HTML을 삽입하는 도우미)을 사용하여이 작업을 수행하려는 경우 플래시 메시지가 레이아웃 파일에 표시되는 방식을 변경할 수 있습니다. 기본적으로 그들은 단지 <%= flash[:success] %>을 사용하며, 자동으로 HTML을 이스케이프합니다. 플래시 메시지에 대해 그렇게하지 않으려면