0

これはビューです

<%= '<br /><br />' if flash %>
<% flash.each do |name, msg| %>
  <div class="alert alert-<%= name == :notice ? "success" : name.to_s %>">
    <a class="close" data-dismiss="alert">&#215;</a>
    <%= content_tag :div, msg.html_safe, :id => "flash_#{name}" if msg.is_a?(String) %>
  </div>
<% end %>

<%= yield %>

以下のこのコードは、レコードを削除した後、画面の上部に 1 つのフラッシュ メッセージ (「削除済み」) のみを表示します。それが私が望む方法です。

def update

    if params[:destroy]

        if current_user.id == @code.user_id
            @code.destroy
            flash[:notice] = "Deleted"
        else
            flash[:notice] = "You don't have permission to edit"
        end

        respond_to do |format|
            format.html { redirect_to community_codes_url }
            format.json { head :no_content }
        end

    else

        respond_to do |format|
            if @code.update_attributes(params[:code])
                format.html { redirect_to community_code_path(@community.community_name, @code), notice: 'Updated' }
                format.json { head :no_content }
            else
                format.html { render action: "edit" }
                format.json { render json: @code.errors, status: :unprocessable_entity }
            end
        end

    end

end

しかし、以下のコードはこのルールを台無しにしており、私は完全に混乱しています:(

新しいレコードを作成すると、前のメッセージと同じように 1 つのフラッシュ メッセージだけが表示されるはずです。その中にツイートボタンがあります。

htmlこのフラッシュには文字列だけでなく、javascriptフラッシュ メッセージも含まれています。
2回のフラッシュメッセージがあるかどうかは問題ではないと思います:(

フラッシュ メッセージを 1 つだけ表示するにはどうすればよいですか?

def create      

    @code = @community.codes.build (params[:code]) 
    @code.user_id = current_user.id

    respond_to do |format|
        if @code.save       
            tag_strings = @community.tags.join(", ") + "," if @community.tags
            flash[:notice] = '<a href="https://twitter.com/share" class="twitter-share-button" data-lang="en" data-hashtags="' + tag_strings + 'tags here!">Tweet</a><script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>You can tweet if you click this button'

            format.html { redirect_to community_code_path(@community.community_name, @code) }
            format.json { render json: [@community, @code], status: :created, location: @code }
        else
            format.html { render action: "new" }
            format.json { render json: @code.errors, status: :unprocessable_entity }
        end
    end
end
4

1 に答える 1

1

1 つのメッセージのみを表示するメッセージでnoticeは、ハッシュのキーにflash書き込み、次に同じキーに再度書き込み、それによって上書きします。2 つのメッセージを表示するものでは、noticeキーに 1 回書き込み、キーに 1 回書き込みerror、結果として 2 つのキーになります。次に、フラッシュ機構が両方を表示します。使用しているフラッシュ表示メカニズムに基づいて、問題の 2 つの異なる「レベル」であるため、異なる色で表示される場合があります。

1 つだけ表示したい場合は、flashハッシュの同じキーに書き込み続けることができます。

于 2013-10-31T15:53:31.023 に答える