2017-04-02 8 views
0

私は2つのモデルのブログとコメントを持っています。ブログには複数のコメントが含まれ、コメントは1つのブログにしか属しません。 ブログ/ 2 /コメント/ 1次のコードをリファクタリングしますか?

のようなAPIを示すために

私はコメントコントローラ

def show 
    @blog = Blog.find(params[:blog_id]) 
    @comments = @blog.comments 
    @comment = @comments[params[:id].to_i - 1] 
    end 

の内側に次のコードを使用する必要があり、私はこのコードは、特に最後の、かなりakwardと感じone @comments[params[:id].to_i - 1]。パラメータIDを整数に変換してから、0ベースの配列インデックスに変更する必要があります。任意のリファクタリングがここで発生する可能性があります。

+2

はい、このコードが何をするのかはまったくわかりません。各投稿/ブログを独自のコメントカウンターにすることはできますか?なぜコメントテーブルのIDフィールドを使用しないのですか? –

+0

はい、私はそれぞれの投稿に独自のコメントカウンタを実行させる必要があります –

答えて

0

「Rails」をもっと見せてください。このような?

def show 
    @blog = Blog.find(params[:blog_id]) 
    @comment = @blog.comments.find params[:id] 
end 

OPのコメントによると、あなたの変換は必要ですです。ただし、コメント全体を読み込まずに、必要なものだけを読み込むことができます。

@comment = @blog.comments.offset(params[:id].to_i - 1).limit(1) 
+0

'find 'と' []'を使って要素にアクセスするのには違いがあります。 'find'は' 0'で 'ActiveRecord :: RecordNotFound'例外を送出し、' [] 'は' 0'で最初の要素をフェッチします。 –

+0

これは、そこに-1がない理由です... –

+0

それは私のデザインを満たしていません。 blog/2/comment/1はブログ2の最初のコメントを返すべきですが、このimplementio return nullはブログ1の場合の最初のコメントです。 –