2017-02-19 100 views
0

我正在使用rails_best_practices來編寫我的代碼。 評論屬於帖子,屬於用戶。 我comments_controller.rb文件看起來像這樣 導軌模型關聯作者ID

class CommentsController < ApplicationController 
    before_action :find_post 

    def create 
    @comment = @post.comments.create comment_params 
    @comment.user_id = current_user.id 
    redirect_to @post if @comment.save 
    end 

    private 

    def find_post 
     @post = Post.find(params[:post_id]) 
    end 

    def comment_params 
     params.require(:comment).permit(:post_id, :body) 
    end 
end 

而且我得到這個錯誤use model association (for @comment)。 重構我的創建方法後看起來像這樣

def create 
    @comment = @post.comments.create(
    comment_params.merge(user_id: current_user.id) 
) 
    redirect_to @post if @comment.save 
end 

我的問題是:什麼是做到這一點的最好的和正確的方式?

回答

1

通常我會建議在控制器特定的_params函數內的任何必需的參數烘烤。也就是說,這樣做:

def comment_params 
    params.require(:comment).permit(:post_id, :body).merge(
    user: current_user 
) 
end 

然後,當它到達您的控制器行動,你幾乎是好去。

我傾向於做的是有一個build方法構建了兩個newcreate合適的對象:

def build_comment 
    @comment = @post.comments.build(comment_params) 
end 

現在這個,如果你放鬆PARAMS的require約束將正確填充,但它是由你如何使這個靈活。我發現這一貫地爲多個編輯輪次填充和準備相同的對象,並且在第一輪中您需要設置一些默認值。