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

您将需要一个相应的模板successerror处理成功或错误消息的显示。

如需更多信息,请查看此处

于 2013-08-06T08:27:41.937 回答