Ruby On Rails 3提交表单中的AJAX更新结果

时间:2010-10-21 01:49:02

标签: ruby-on-rails ajax ruby-on-rails-3

我被困住了;我做了一个搜索,我找不到如何让这个项目工作的指针。我在index.html.erb上有一个表单:

<html>   <head>
    <title>Ajax List Demo</title>   <h1>Listing posts</h1> 

    <%= javascript_include_tag "prototype" %>   </head>   <body>
    <h3>Add to list using Ajax</h3>
    <% form_tag (  :remote=>true, :update => 'my_list', :action => :list , :method=>:post, :format =>:xml ) do %>

      Enter the url:
      <%= text_field_tag 'url' ,'', :size => 80 %>
      <%= submit_tag "Find" %>
    <% end %>
    <div id="my_list"><%= render :partial => 'profiles/list' %></div>   </body> </html>

现在我有一个名为my_list的div。当我提交表单时,我想要我的部分_list.html.erb(在配置文件目录内,也尝试了主页目录)来更新列表的结果。

我的家庭控制器有这种方法:

def list
    puts "here!!!!"
   reader = Reader.new
  @profiles =  reader.processURL(params[:url])
    render :partial=>'profiles/list', :locals => { :profiles => @profiles}
end

我最终收到此错误:

ActionView::MissingTemplate (Missing partial profiles/list with {:locale=>[:en, :en], :handlers=>[:rjs, :builder, :rhtml, :rxml, :
erb], :formats=>[:xml]} in view paths "C:/Users/....tree/app/views"):
  app/controllers/home_controller.rb:22:in `list'

Rendered C:/Ruby187/lib/ruby/gems/1.8/gems/actionpack-3.0.0/lib/action_dispatch/middleware/templates/rescues/missing_template.erb
within rescues/layout (1.0ms)

任何人都可以帮助我或者向我发送正确的方向来了解如何通过表单提交更新div渲染吗?再次感谢。

1 个答案:

答案 0 :(得分:0)

首先,我通过render(@homepages)index.html.erb中获取index.js.erb的ajax确定,但我搜索更新@homepages无效。

javascript_include_tag您错过了rails.js我认为处理了ajax请求。 javascript_include_tag :defaults会为你完成所有这些以及其他一些你不需要的事情。如果您没有使用jquery,则需要原型并且至少需要rails.js

我认为此form_tag的格式不正确:

<% form_tag (:remote=>true, :update => 'my_list', :action => :list , :method=>:post, :format =>:xml) do %>

“(”之后的第一个值应为item_path,然后是条件:action => :list

:method => post会带您进入createnew行动。

:update => 'my_list'将使用javascript(原型)

list.js.erb中完成

jquery和prototype的代码类似,但略有不同(参见Railscast 205

为什么在form_tag中格式化xml,把它放在控制器“list”中我的是:

respond_to do |format|
  format.html # index.html.erb
  format.xml  { render :xml => @homepages }
  format.js
end

不确定你是否可以使用'url'而不是它:url你可以使用它们。

当我收到丢失的模板时,那是因为它正在寻找search.html.erb文件。在您的情况下,它正在寻找list.html.erb