【问题标题】:Rails 3.0.10 AJAX issue, create.js.erb fileRails 3.0.10 AJAX 问题,create.js.erb 文件
【发布时间】:2011-12-10 14:37:53
【问题描述】:

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

我正在使用 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

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

作为测试,如果我把

$("#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

任何帮助将不胜感激,我已经被难住了一段时间。

【问题讨论】:

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


    【解决方案1】:

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

    因此,您需要通过以下方式进行设置:

    @microposts = current_user.microposts
    

    但实际上没有必要再进行一次数据库调用。我建议您仅在您的#microposts 元素中附加(或预先添加)新项目。类似的东西:

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

    并且该部分应该能够使用创建操作中的@micropost 对象。

    【讨论】:

    • 谢谢。我最终改变了一点,但这为我指明了正确的方向。
    【解决方案2】:

    试试这个:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-18
      • 1970-01-01
      • 1970-01-01
      • 2011-09-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多