1

コントローラーに次のようなアクションがあります。

  def show
    @project = current_customer.projects.where(id: params[:project_id]).first
    if @project
      @feature = @project.features.where(id: params[:feature_id]).first
      if @feature
        @conversation = @feature.conversations.where(id: params[:id]).first
        unless @conversation
          head 401
        end
      else
        head 401
      end
    else
      head 401
    end
  end

問題は の繰り返しですhead 401。このアクションを記述するより良い方法はありますか?

4

2 に答える 2

3

このように書きます

def show
  @project = current_customer.projects.where(id: params[:project_id]).first
  @feature = @project.features.where(id: params[:feature_id]).first if @project
  @conversation = @feature.conversations.where(id: params[:id]).first if @feature

  # error managment
  head 401 unless @conversation      
end
于 2012-09-07T09:47:48.717 に答える
1

たぶん、このようなものでプロジェクトモデルをリファクタリングできます

Model Project
  ...
def get_conversation
  feature = features.where(id: params[:feature_id]).first
  conversation = feature.conversations.where(id: params[:id]).first if feature
end

そしてあなたのコントローラーで

Controller ProjectController
def show
  @project = current_customer.projects.where(id: params[:project_id]).first
  @conversation = @project.get_conversation

  head 401 unless @conversation
end
于 2012-09-07T09:57:00.620 に答える