2011-03-31 44 views
2
提交局部

我在我的控制器以下代码:滑轨误差通过Javascript

文件:应用程序/控制器/ 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的): 文件:应用/视图/photos/show_snapshot_comments.js.erb

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

show_snapshot_copmments从所谓: 应用程序/视图/照片/ 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' 

任何想法可以怎么回事?

回答

1

您正试图将局部变量传递给部分“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

+0

已经错过了意见位;) – oliverbarnes 2011-04-01 02:58:24

+0

我发誓,当我刚刚看到一匹马的动画与气球上投票你的答案。必须是水中的东西... – oliverbarnes 2011-04-01 02:59:28

+0

o亲爱的,是因为愚人节=) – Shanison 2011-04-01 04:01:59

0

快照设置为控制器中的局部变量,所以该模板没有看到它。然后

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

模板:将其设置为一个实例变量

:locals => {:snapshot => @snapshot