Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery rails ajax表单保存、重定向和更新问题_Jquery_Ruby On Rails_Ruby_Ajax_Ruby On Rails 3 - Fatal编程技术网

Jquery rails ajax表单保存、重定向和更新问题

Jquery rails ajax表单保存、重定向和更新问题,jquery,ruby-on-rails,ruby,ajax,ruby-on-rails-3,Jquery,Ruby On Rails,Ruby,Ajax,Ruby On Rails 3,我正在尝试在rails中创建一个支持ajax的表单。当我点击提交按钮时,表单已正确保存(我可以看到数据库中发生的更新),但是,页面就在那里(看起来好像什么都没有发生,没有重定向等),在我的web inspector中,我看到以下错误: POST http://localhost:3000/user/mike 500 (Internal Server Error) 但是,当我单击上面的链接时(http://localhost...)显示的页面包括:注意 我希望页面像往常一样重定向,并显示:not

我正在尝试在rails中创建一个支持ajax的表单。当我点击提交按钮时,表单已正确保存(我可以看到数据库中发生的更新),但是,页面就在那里(看起来好像什么都没有发生,没有重定向等),在我的web inspector中,我看到以下错误:

POST http://localhost:3000/user/mike 500 (Internal Server Error)
但是,当我单击上面的链接时(http://localhost...)显示的页面包括
:注意

我希望页面像往常一样重定向,并显示
:notice
(如果可用)。我还希望能够通过ajax保存表单,而无需在特定时间间隔(每分钟左右)重定向。这可能吗?

user\u controller.rb

def create
    @user = User.new(params[:user])

    respond_to do |format|
      if @user.save
         format.html { redirect_to(@user, :notice => 'User saved.') }
          format.js

        else

          format.html { render :action => "new" }
          format.js
        end
    end
  end

  def update
    @user = User.find_by_username(params[:id])

    respond_to do |format|
      if @user.update_attributes(params[:user])

        format.html { redirect_to(@user, :notice => 'User updated.') }
        format.js

      else

        format.html { render :action => "edit" }
        format.js

      end
    end
  end
这是我的表单标签:

<%= form_for @user, :remote => true, :html => { :multipart => true, :class => 'edit_profile' }  do |f| %>
true,:html=>{:multipart=>true,:class=>'edit_profile'}do | f |%>

任何建议都会非常有用…谢谢大家。

如果您希望创建操作是ajax,您需要添加一个create.js模板(create.js.erb或create.js.haml),该模板将提供一些脚本来在页面上呈现消息

(假设jquery和ERB)--create.js.ERB:

<% if @user.errors.any? %>
    //update a div here with the errors collection
<% else %>
    $("#flash_notice").html("<%= escape_javascript(flash[:notice])%>");
<% end %>

//使用errors集合更新此处的div
$(“#flash_notice”).html(“”);
如果发生错误,则需要在其中添加一些附加逻辑,以便向用户显示错误列表。最简单的方法是如果表单已经在部分中,因为您可以重新呈现显示错误集合的部分。或者,您可以将errors集合写入div


至于在后台定期更新,发布表单的简单javascript计时器可以正常工作。在控制器中,您可以不渲染任何内容(使用render nothing:true),也可以提供update.js脚本来更改消息,例如“上次保存在xxxx”。我没有时间收集链接,但您应该检查ajax轮询以定期保存表单。如果希望页面在提交时重定向,则应从表单中删除remote=>true。默认情况下,当您通过ajax发送表单时,Rails将查找update.js视图文件以作出响应。如果您没有它,它在客户端不会起任何作用。