繁体   English   中英

Rails错误通过Javascript提交部分内容

[英]Rails Error submitting partial via Javascript

我的控制器中有以下代码:

文件:app / controllers / photos_controller.rb

def show_snapshot_comments
    snapshot = Snapshot.find(params[:id])
    @photo = snapshot.photo
    comments = snapshot.comments.paginate :page => params[:page]
    @snapshot_comment = snapshot.comments.new
      respond_to do |format|
        format.js
      end
   end

JavaScript(jQuery):文件:app / views / photos / show_snapshot_comments.js.erb

$j('#info').append("<%= escape_javascript(render :partial  => "snapshot_comments",
        :locals   => {:snapshot => snapshot, :comments => comments}) %>" );

show_snapshot_copmments从以下位置调用:app / views / photos / show.html.erb

它似乎不起作用。

我的错误:

渲染照片/ show_snapshot_comments

ActionView::TemplateError (undefined local variable or method `snapshot' for #<ActionView::Base:0x2aaaaea473c8>) on line #2 of app/views/photos/show_snapshot_comments.js.erb:
1: $j('#info').append("<%= escape_javascript(render :partial  => "snapshot_comments",
2:         :locals   => {:snapshot => snapshot, :comments => comments}) %>" );

    app/views/photos/show_snapshot_comments.js.erb:2
    app/controllers/photos_controller.rb:227:in `show_snapshot_comments'

任何想法可能会发生什么?

您正在尝试将局部变量传递给部分“ snapshot_comments”。但是,这两个局部变量(快照和注释)未在当前作用域(在视图中)中定义。

如果要将变量从控制器传递到视图,则必须执行以下操作:

def show_snapshot_comments
    @snapshot = Snapshot.find(params[:id])
    @photo = snapshot.photo
    @comments = snapshot.comments.paginate :page => params[:page]
    @snapshot_comment = snapshot.comments.new
      respond_to do |format|
        format.js
      end
   end

$j('#info').append("<%= escape_javascript(render :partial  => "snapshot_comments",
        :locals   => {:snapshot => @snapshot, :comments => @comments}) %>" );

尝试上面的代码,看看是否可行。 我只是将快照和注释更改为@snapshot和@comments。

快照在控制器中设置为局部变量,因此模板看不到它。 将其设置为实例变量:

@snapshot = Snapshot.find(params[:id])

然后在模板中:

:locals   => {:snapshot => @snapshot

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM