Ruby on Rails远程表单不更新页面

时间:2012-07-24 23:33:00

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

更新

我可以通过从

更改模型调用来使其工作
@comments = VideoComment.all(:conditions => { :video_id => @video.id}, :limit => 5, :order => :created_at) 

@comments = VideoComment.last(5).reverse

虽然有效,但它提供了来自所有视频的最后视频评论,而我只想要当前视频中的视频(@video.id)。

有关如何做到这一点的任何线索?


我有一个Video控制器和一个VideoComments控制器,用于管理Video控制器的注释。我正在尝试使用ajax使我的远程表单更新注释列表,但它似乎不起作用。你能找到我做错了吗?

展示页面的HTML代码:

- if current_user
    #comment-form
      = render 'video_comments/comment_form'
  %ul
    #comments
      = render @comments

video_comments / _comment_form.html.haml

= form_for current_user.video_comments.build(:video_id => params[:id]), :remote => true do |f|
  .form-fields
    .comment-content
      = f.text_area :content, rows:2
    = f.hidden_field :video_id
    = f.hidden_field :user_id
    .submit-form
      = f.submit "Add a comment", :class => "btn btn-default "

Video_Comments控制器create操作:

 def create
    @comment = VideoComment.create(params[:video_comment])
    @video = @comment.video
    @comments = VideoComment.all(:conditions => { :video_id => @video.id}, :limit => 5, :order => :created_at) 
    render :toggle      
 end

管理页面的toggle.js.erb文件更改:

$("#comment-form").html("<%= escape_javascript render 'comment_form' %>");
$("#comments").html("<%= escape_javascript render @comments %>");

1 个答案:

答案 0 :(得分:2)

如果您使用的是Rails 3,则可以

@comments = VideoComment.where(:video_id => @video.id).order(:created_at).limit(5) 

或者,如果你有正确定义的关系,你也可以

@comments = @video.comments.order(:created_at).limit(5)