在不离开页面的情况下更新记录并显示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
答案 0 :(得分: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。
答案 1 :(得分: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
的相应模板,用于处理成功或错误消息的显示。
有关详细信息,请查看here。