0

我創建一個基本的留言板應用程序與Rails 3.我希望職位與UJS/jQuery創建(提交與AJAX的職位,並清除表單)。我想這將是簡單的,但我得到這個錯誤:簡單的UJS與jQuery不工作在Rails 3

Rendered posts/create.js.erb (64.5ms) 
Completed in 1771ms 

ActionView::Template::Error (undefined local variable or method `posts' for #<#<Class:0x1d681d0>:0x1d66f10>): 
    1: $("#posts").html("<%= escape_javascript(render(:partial => posts)) %>"); 
    2: $("#form").html("<%= escape_javascript(render 'form') %>"); 
    app/views/posts/create.js.erb:1:in `_app_views_posts_create_js_erb__431255654_15413772__591965598' 
    app/controllers/posts_controller.rb:41:in `create' 

Rendered /usr/local/lib/ruby/gems/1.9.1/gems/actionpack-3.0.0/lib/action_dispatch/middleware/templates/rescues/_trace.erb (10.5ms) 
Rendered /usr/local/lib/ruby/gems/1.9.1/gems/actionpack-3.0.0/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (53.8ms) 
Rendered /usr/local/lib/ruby/gems/1.9.1/gems/actionpack-3.0.0/lib/action_dispatch/middleware/templates/rescues/template_error.erb within rescues/layout (95.0ms) 

佈局/ application.html.erb:

<!DOCTYPE html> 
<html> 
    <head> 
    <title><%= @title || controller.action_name %></title> 
    <%= stylesheet_link_tag 'style' %> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> 
    <%= javascript_include_tag 'jquery.timeago','jquery.watermark', 'rails' %> 
    <%= csrf_meta_tag %> 
    </head> 
    <body> 
    <container> 
     <%= render "shared/nav" %> 
     <section id="content"> 
     <%- flash.each do |name, msg| -%> 
      <%= content_tag :div, msg, :id => "flash_#{name}" %> 
     <%- end -%> 
     <%= yield %> 
     </section> 
     <%= render "shared/footer" %> 
    </container> 
    </body> 
</html> 

帖子/ index.html.erb:

<div id="posts"> 
    <%= render 'posts' %> 
</div> 
<%= will_paginate @posts, :previous_label => "previous", :next_label => "next" %> 
<div id="form"> 
    <%= render 'form' %> 
</div> 

posts/_posts.html.erb:

<%- for post in @posts -%> 
    ... 
<%- end -%> 

posts/_form.html.e RB:

<%= form_for :post, :remote => true, :url => { :controller => :posts, :action => "create" } do |f| %> 

    <%= f.label :title, "title" %> 
    <%= f.text_field :title, :placeholder => "title" %> 

    <%= f.label :content, "message" %> 
    <%= f.text_area :content, :placeholder => "message" %> 

    <%= f.submit 'post' %> 

<% end %> 

帖子/ create.js.erb:

$("#posts").html("<%= escape_javascript(render(:partial => posts)) %>"); 
$("#form").html("<%= escape_javascript(render 'form') %>"); 

posts_controller.rb:

class PostsController < ApplicationController 
    before_filter :find_post, :only => [:show, :edit, :update, :destroy] 
    respond_to :html, :js 

    def index 
    @title = "chat" 
    @posts = Post.paginate :page => params[:page], :order => "updated_at DESC" 
    respond_to do |format| 
     format.html 
     format.js 
    end 
    end 

    # ... 

    def new 
    @post = Post.new 
    respond_to do |format| 
     format.html 
     format.js 
    end 
    end 

    def create 
    @post = Post.new(params[:post]) 
    respond_to do |format| 
     if @post.save 
     flash[:notice] = "Created \"#{@post.title}\"" 
     format.html { redirect_to(posts_url) } 
     format.js 
      else 
     flash[:error] = "Title, tag and message required" 
     format.html { redirect_to(posts_url) } 
     format.js 
     end 
    end 
    end 

    # ... 

    private 

    def find_post 
    @post = Post.find(params[:id]) 
    @comments = @post.comments 
    end 
end 

我使用Rails 3.0.0和Ruby 1.9.2。不知道問題是什麼。

回答

4
posts/create.js.erb

$("#posts").html("<%= escape_javascript(render(:partial => posts)) %>"); 

應該是:

$("#posts").html("<%= escape_javascript(render "posts") %>"); 

有上崗沒有定義,所以,如果你給它一個字符串,它會評估對部分職位/ _posts.html.erb

另外,爲了在rails 3應用程序中使用jQuery而不是原型,jquery-rails非常棒。

+0

非常感謝!我沒有使用'escape_javascript',JS沒有被執行! – Zabba 2011-01-26 10:18:43

0

只要確保你確實安裝了jQuery UJS的東西吧?我想你是這麼做的,因爲你是這樣標記的,但是你在文章中沒有提及它。再次,只要確保!

+0

這就是''rails''在'application.html.erb'中的地方 – BasicObject 2010-09-10 03:31:14

+0

我手動從github上的文件放到我的javascripts目錄中。 – BasicObject 2010-09-10 05:17:30

+0

您是否按照此處列出的說明進行操作? http://github.com/rails/jquery-ujs/blob/master/README.rdoc – 2010-09-10 05:44:32