1

このメソッドの先頭にある proc を他の場所で定義し、メソッドのスコープから戻る proc の機能を保持する方法があるかどうかを知りたいです。

  def add_user_to_team(user_id, team_id)

    v = Proc.new do |t|
      t.error の場合は t を返す
      t
    終わり

    User.transaction do

      ユーザー = v.call(
        validate_user_exists(user_id)).obj

      チーム = v.call(
        validate_team_exists(team_id)).obj

      ...他の多くの検証...

      結果 (真、なし、team_user)
    終わり

  終わり

他の場所に含めることができるモジュールでこのプロシージャを定義できるようにしたいと考えています。しかし、メソッドに proc を返すと、return ステートメントで LocalJumpError が返されます。

たとえば、私はやりたい

デフォルト検証
  Proc.new do |t|
    t.error の場合は t を返す
    t
  終わり
終わり

元のコードを改良して行う

  def add_user_to_team(user_id, team_id)

    User.transaction do

      ユーザー = validate.call(
        validate_user_exists(user_id)).obj

      チーム = validate.call(
        validate_team_exists(team_id)).obj

      ...他の多くの検証...

      結果 (真、なし、team_user)
    終わり

  終わり

また、このエラー チェック ロジックを統合する方法について、他の提案も受け付けています。

  1. 検証が失敗した場合、スコープされたメソッドが救済されます
  2. エラーがなければオブジェクトを返し、続行します
4

1 に答える 1