如何为嵌套路由呈现页面

时间:2016-07-20 04:19:13

标签: ruby-on-rails-4

为了学习rails,我开始编写自己的(精简版)reddit。目前,我的评论路线嵌套在我的帖子路线中:

resources :posts do 
 resources :comments
end 

对于我的评论控制器,在索引&创建我有以下

def index 
        @post = Post.find(params[:post_id])
        @comments = @post.comments

        if params[:comment].nil? 
            @comment = Comment.new 
            @comment.post_id = @post.id
        else 
            @comment = Comment.find([:comment])
        end 
    end 

    def create 
        @comment = Comment.new(comment_params)
        @comment.user_id = current_user.id
        @comment.post_id = params[:post_id]

        if @comment.save 
            #flash 
            redirect_to post_path(@comment.post)
        else 
            #flash
            render 'index'
        end 
    end 

哪种方法效果很好,除了最后一部分:渲染

我希望我的评论与其他评论显示在同一页面上(就像reddit一样),所以我不想使用www.example.com/post/4/comment/new路径,而是通过www.example.com/post/4/comments路径。

我知道我可以进行重定向,但是我想保留评论文本,以便用户可以进行更正。有没有办法用渲染正确地执行此操作,而不是将文本放在会话变量中并进行重定向?我理解这是一个边缘案例,但我正在尝试将其作为学习机会。

1 个答案:

答案 0 :(得分:0)

您可以将评论传递给索引部分 - 否?

<%= render "index", locals: {comment: @comment} %>

或尝试部分;

<%= render partial: "index", locals: {comment: @comment} %>