5

Rails 7 allows anything that responds to `#to_str` into redirect_to

 3 years ago
source link: https://blog.saeloun.com/2021/08/31/rails-redirect-to-str
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Rails 7 adds support for passing all string-like arguments (that respond_to? #to_str) to redirect_to.

Any class that defines #to_str like the Addressable::URI class can now be passed to redirect_to.

We can also write a custom class that defines #to_str as shown below.

Example

  class GoogleSearcher
    attr_reader :query

    def initialize(query)
      @query = query
    end

    def to_str
      "https://www.google.com/search?q=#{query}"
    end
  end

Before

  def saeloun_home
    redirect_to "https://saeloun.com"
  end
  #=> No error, will work properly and redirect us to https://saeloun.com

  def google_home
    redirect_to Addressable::URI.parse("https://google.com")
  end
  #=> Raises NoMethodError

  def search
    redirect_to GoogleSearcher.new("Cat Pics")
  end
  #=> Raises NoMethodError

In the above example, the google_home action will raise a NoMethodError as redirect_to expects a string argument. (Or a Hash, a Record or a block that gets evaluated to a string)

Similarly, the search action will raise a NoMethodError for the user-defined class.

After

  def saeloun_home
    redirect_to "https://saeloun.com"
  end
  #=> No error raised

  def google_home
    redirect_to Addressable::URI.parse("https://google.com")
  end
  #=> No error raised

  def search
    redirect_to GoogleSearcher.new("Cat Pics")
  end
  #=> No error raised

In the above example, for the google_home action, #to_str gets internally called on Addressable::URI.parse("https://google.com").

A valid string URL is returned and, we are successfully redirected to https://google.com.

Similarly, for the search action, #to_str gets internally called on the GoogleSearcher class object and we are successfully redirected to https://www.google.com/search?q=Cat%20Pics.


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK