3

コントローラーにはアクションがあります。ajax 経由で json 形式でのみ呼び出すことができます。

def update
    @article = Article.find_by_id params[:id]
    respond_to do |format|
      if @article.update_attributes(params[:article])
        flash[:message] = "good"       
      else
        flash[:error] = @article.errors.full_messages.join(", ")
      end
          format.json { render :json => flash}
  end

end

ページの一部

<% unless flash[:error].blank? %>
   <%= flash[:error] %>
<% end %>

<% unless flash[:message].blank? %>
  <%= flash[:notice] %>
<% end %>
<!-- page content goes -->

もちろん、ページにはメソッドを呼び出すbutton_towithが含まれています。:remote=>trueupdate

肝心なのは、更新後に何も表示されないことです。JSON オブジェクトは間違いなく返されます。fireBug で確認できます。

問題は、フラッシュを正しく使用しているかどうかです。また、ページにメッセージを表示するにはどうすればよいですか? ajaxを忘れないでください。

4

3 に答える 3

4

Respond_to ブロックに if/else ステートメントがあるのはなぜですか?

def update
  @article = Article.find_by_id params[:id]
  if @article.update_attributes(params[:article])
    flash[:notice] = "Good"
  else
    flash.now[:notice] = "Bad"
    render "edit"
  end
  respond_to do |format|
    format.html {redirect_to @article}
    format.js
  end
end

次にupdate.js.erbを作成します

$("#notice").text("<%= escape_javascript(flash[:notice]) %>")
$("#notice").show()

上記のコードは 100% 正しいとは限りません。

フラッシュの場合、次のようなものがあります。

<div id="notice">
  <% flash.each do |key, value| %>
    <%= content_tag(:div, value, :class => "flash #{key}") %>
  <% end %>
</div>
于 2012-08-14T10:34:51.090 に答える
1

この投稿には、必要なすべてのコードが含まれています。それは私の皮を救った:

https://gist.github.com/linjunpop/3410235

これは、いくつかのマイナーな変更を加えたフォークです。

https://gist.github.com/timothythehuman/5506787

于 2013-06-14T02:54:20.740 に答える
-1

ajax:successメッセージを置き換えるか、メッセージをdomに配置することで、フラッシュメッセージを表示するコールバックをバインドする必要があると思います。

于 2012-08-13T19:59:12.510 に答える