Rails 3.0.10 AJAX问题,create.js.erb文件

时间:2011-12-10 14:37:54

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

我是网络开发的新手,所以请牢记这一点。

我正在使用Rails 3.0.10创建我的第一个应用程序

我有一个微博表单,我正在尝试将AJAX实现。

我已正确设置控制器(我相信)并已将:remote => true添加到微博表格中。

Microposts Controller

def create
      @user = User.find(current_user.id)
      @micropost = current_user.microposts.build(params[:micropost])
      if @micropost.save
        flash[:success] = "Created micropost"
        respond_to do |format|
        format.html { redirect_to @user }
        format.js
      end
      else
        render 'users/show'
      end
    end

问题出在create.js.erb文件的views / microposts

作为测试,如果我把

$("#microposts").html("<p>Hello world!</p>")

它按预期工作。

即使我使用实例变量将ruby代码嵌入其中,也可以。

但是,如果我把

$("#microposts").html("<%= render @microposts %> ")

它什么也没做。

事实上,只要我尝试任何rails方法,它就什么都不做。

这些是我的javascript文件:

/javascripts/jquery.js
/javascripts/jquery_ujs.js
/javascripts/jquery.min.js
/javascripts/application.js

任何帮助都会非常感激,我现在​​已经被困了一段时间。

2 个答案:

答案 0 :(得分:2)

您没有在创建操作中加载@microposts(集合)。

所以,你需要通过以下方式设置它:

@microposts = current_user.microposts

但是真的没有必要再做一次DB调用。我建议只使用新项目附加(或预先添加)#microposts元素。类似的东西:

$("#microposts").prepend("<%= escape_javascript(render '_micrpost_item') %>");

该部分应该能够使用create动作中的@micropost对象。

答案 1 :(得分:0)

请改为尝试:

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