Actions
Feature #16372
closedAllow pattern matching to bind instance variables
    Feature #16372:
    Allow pattern matching to bind instance variables
  
Status:
Rejected
Assignee:
-
Target version:
-
Description
I tried this code, but got sytax error:
case [1, 2]
in @a, @b
end
syntax error, unexpected instance variable, expecting '}'
    in @a, @b
       ^~
I think it would be more useful if we could bind instance variables with pattern matching.
Use case¶
I understand this is not Rails way, but we have some codes like this:
def Foo.create_foo(params)
  if valid?(params)
    [:ok, create(params)]
  else
    [:ng, nil]
  end
end
class FooController < ApplicationController
  def create
    result, @foo = Foo.create_foo(foo_params)
    case result
    when :ok
      redirect_to @foo
    when :ng
      # @foo will be used in view
      render :new
    else
      raise "Unknown result: #{result}"
    end
  end
end
I thought I could make it simpler with pattern matching (but impossible):
class FooController < ApplicationController
  def create
    case Foo.create_foo(foo_params)
    in :ok, @foo
      redirect_to @foo
    in :ng, _
      render :new
    end
  end
end
  
Actions