0

ページを離れずに記録を更新し、Flash の成功通知を表示するにはどうすればよいでしょうか?

これは私のコードの一部ですが、ルートパスにリダイレクトされます:

意見

      <%= form_for @user, url: record_testimonial_path(@user) do |f| %>  
        <%= f.text_area :testimonial %>
        <%= f.submit "Submit"%>
      <% end %>

コントローラ

def record_testimonial
  @user.update_attribute(:testimonial, params[:user][:testimonial])
  flash[:success] = "Thank you!"
  redirect_to root_path
end
4

2 に答える 2

2

リダイレクトできます:

redirect_to :back, flash: { success: t('flash.thank_you') }

または、リモート経由で行う必要があります。

<%= form_for @user, url: record_testimonial_path(@user), remote: true do |f| %>  
  <%= f.text_area :testimonial %>
  <%= f.submit "Submit"%>
<% end %>

そしてコントローラーで:

def record_testimonial
  if @user.update_attribute(:testimonial, params[:user][:testimonial])
    respond_to do |format|
      format.js { render 'record_testimonial', layout: false }
    end
  else
    render nothing: true # This will silently fail. Probably not intended.
  end      
end

そして、record_testimonial.js.erb:

$('#some_id').html('<%= j render "some_partial", user: @user %>');

これらは最も一般的であり、賢明な方法と言えます。ajax を使用する場合は、Flash メッセージを手動で表示することを忘れないでください。これは 1 行の JS である必要があります。

于 2013-08-06T08:29:02.780 に答える
0

ページの更新を完全に回避する最善の方法は、フォームを次のように使用する:remote => trueように設定することです

<%= form_for @user, url: record_testimonial_path(@user), :remote => true do |f| %> 

次に、コントローラーでそれに応じて応答します。

def record_testimonial
  respond_to do |format|
    if @user.update_attribute(:testimonial, params[:user][:testimonial])
      render :success
    else
      render :error
    end
  end
end

成功またはエラー メッセージの表示を処理するためsuccessに、対応するテンプレートが必要です。error

詳細については、こちらをご覧ください。

于 2013-08-06T08:27:41.937 に答える