2013-07-18 50 views
1

所以我們可以說我有這樣的代碼:Rails的:即顯信息不會出現在任何位置

class PostsController < InheritedResources::Base 
    # Add before_filter here and devise should handle the redirection if the user is not signed in. 
    before_filter :authenticate_user!, only: [:vote_up] 

    def vote_up 
    begin 
    current_user.vote_for(@post = Post.find(params[:id])) 
    redirect_to [@post] 
    flash[:success] = "You have voted successfully" 
rescue ActiveRecord::RecordInvalid 
    redirect_to [@post] 
    flash[:error] = "You have already voted" 
    end 
end 

end 

無論是消息「您已成功投」或「您已投票」被顯示。

在我看來,我有:

enter code here 

<p id="notice"><%= notice %></p> 
    <%= @post.embed .html_safe %> 
    <header> 
     <h7><%= @post.name %></h7> 
    </header> 
<h8><%= @post.title %></h8> 
<article> 
<%= @post.content .html_safe %> 

<p> 
<%= link_to 'Back', posts_path %> | 
<%= link_to('Vote for this song!', vote_up_post_path(@post), :method => :post) %></p> 

<p><id="notice"><%= notice %></p> 

沒有骰子。我仍然沒有得到任何地方的Flash消息。任何想法我做錯了什麼?

回答

1

應設置flashredirect_to

而且在你看來

<p> 
    <%= flash[:success] unless flash[:success].blank? %> 
    <%= flash[:error] unless flash[:error].blank? %> 
</p> 

您可以檢查此link以及

+0

看起來你回答第一個也是最徹底的。有效!那幾乎是最後一個障礙!謝謝。 –

+0

但是,爲什麼'redirect_to @user,注意:「成功」'工作而不是'redirect_to @user,成功:「成功」'? –

2

你已經在你的控制器使用

flash[:success] = "You have voted successfully" 

你已經打電話了

<%= notice %> 

在您的意見。您必須在控制器或視圖中更改。

您可以添加

format.html {redirect_to的@post,通知: '您已成功投票。' }

在你的控制器,你會得到你需要的信息。

0

最好的方式做到這一點

<% if flash[:notice] %> 
    <div class="notice"><%= flash[:notice] %></div> 
<% end %> 
+0

那麼大約有2000萬種方法可以做到這一點......把它放在div中有什麼好處?是什麼讓這一個最好? –

+0

好吧,如果你不把它放在一個div中,它會工作。 – techdreams

+0

那麼爲什麼說最好的方法? – Alfie

0

你的代碼是這樣的:<p><id="notice"><%= notice %></p>

你需要<p id="notice"><%= notice %></p>

相關問題