如何动态加载ajax的局部视图?

时间:2015-07-30 01:39:02

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

它会创建新的评论记录,但不会重新加载部分:(
它在我点击提交按钮后立即显示一个白色的空白页 为什么?我该如何解决这个问题?

视图/电影/ show.html.erb

<div id="partial">
    <%= render 'movies/comment' %>
</div>

<form action="/comments" method="post" data-remote="true" >
    <input type="text" name="body" id="input" />
    <button type="submit" >Submit</button>
    <input type="hidden" name="video_id" value="<%= params[:uid] %>">
</form>

/config/routes.rb

resources :comments
get "movies/:uid/refresh" => 'movies#refresh'

控制器/ comments_controller.rb

def create
    if @user = User.find_by_twitter_id(session[:id])
    else
        @user = User.new
        @user.twitter_id = session[:id]
        @user.save
    end

    if @movie = Movie.find_by_uid(params[:video_id])
    else
        @movie = Movie.new
        @movie.uid = params[:video_id]
        @movie.save
    end

    @comment = Comment.build_from(@movie, @user.id, params[:body]) 
    @comment.save

    flash[:notice] = "Posted!"

    respond_to do |format|  
        format.js do
            render 'movies/' + @movie.uid + '/refresh'
        end 
    end     
end

控制器/ movies_controller.rb

def refresh
    @movie = Movie.find_by_uid(params[:uid])
    @comments = @movie.comment_threads.order("created_at DESC")

    respond_to do |format|
        format.js 
    end
end

def show
    if @movie = Movie.find_by_uid(params[:uid]) 
        @comments = @movie.comment_threads.order("created_at DESC")
    end

    respond_to do |format|
        format.html # show.html.erb
        format.json { render json: @movie }
    end
end

视图/电影/ refresh.js.erb

$('#partial').html("<%= j(render(:partial => 'movies/comment')) %>");
$('#input').val('');

视图/电影/ _comment.html.erb

<% if @comments %>
    <% @comments.each do |comment| %>
        <%= comment.id %>:<%= comment.body %><br />
    <% end %>
<% end %>

1 个答案:

答案 0 :(得分:0)

controllers / comments_controller.rb

def create
    /*other stuff*/

    @comment = Comment.build_from(@movie, @user.id, params[:body]) 
    @comment.save
    @comments = @movie.comment_threads.order("created_at DESC")

    flash[:notice] = "Posted!"

    respond_to do |format|  
        format.js do
            render :refresh
        end 
    end     
end