-4

私のコントローラーでは、ネストされた多数のif

@cat = params[:categ]
@gid = get_uid(params[:url])
if @gid
    @data = get_task_info(@gid,@cat)
        if @data
        task = Task.new_task(@cat, @data, params[:qty], current_user.id)
            if task.uniq?
                if current_user.pay_for_task(task)
                task.save
                else
                @error = 3 
                end
            else
            @error = 4 
            end
        else
        @error = 2 
        end
else
    @error = 1
end

このコードをより正確に書く方法を教えてください。

4

2 に答える 2

1

最低限できることは、Ruby コードを適切にインデントすることです。ここで質問するときは、もう少し謙虚になってください。私たちはあなたのしもべではありません。

これはあなたを助けるかもしれません。これは可能な限り効率的ではありませんが、エラー処理は実際には最高のパフォーマンスが必要な場所ではありません!

class LibraryError < RuntimeError; end

begin

  @cat = params[:categ]
  @gid = get_uid(params[:url])
  raise LibraryError, 1 unless @gid

  @data = get_task_info(@gid, @cat)
  raise LibraryError, 2 unless @data

  task = Task.new_task(@cat, @data, params[:qty], current_user.id)
  raise LibraryError, 4 unless task.uniq?

  paid = current_user.pay_for_task(task)
  raise LibraryError, 3 unless paid

  task.save

rescue LibraryError => err

  @error = err.message.to_i

end

ただし、エラー メッセージが単なる数字ではなく、情報を示す文字列であると、よりよいでしょう。(見た目にも関わらず、数値は文字列として格納さto_iれているため、 に代入するときに記述しなければなりませんでした@error。)

于 2013-07-28T13:12:14.737 に答える
0

私はこのように実装しました:

def create
@cat = params[:categ]
@gid = get_uid(params[:url])
return @error=1 unless @gid
@data = get_task_info(@gid,@cat)
return @error=2 unless @data
task = Task.new_task(@cat, @data, params[:qty],current_user.id)
return @error=4 unless task.uniq?
return @error=3 unless current_user.pay_for_task(task)
task.save
end

助けてくれてありがとう

于 2013-07-28T22:42:58.787 に答える