v5.1.7 - Show latest stable - 0 notes - Class: CustomUrls
direct(name, options = {}, &block) public

Define custom url helpers that will be added to the application’s routes. This allows you to override and/or replace the default behavior of routing helpers, e.g:

direct :homepage do

direct :commentable do |model|
  [ model, anchor: model.dom_id ]

direct :main do
  { controller: "pages", action: "index", subdomain: "www" }

The return value from the block passed to `direct` must be a valid set of arguments for `url_for` which will actually build the url string. This can be one of the following:

* A string, which is treated as a generated url
* A hash, e.g. { controller: "pages", action: "index" }
* An array, which is passed to `polymorphic_url`
* An Active Model instance
* An Active Model class

NOTE: Other url helpers can be called in the block but be careful not to invoke your custom url helper again otherwise it will result in a stack overflow error

You can also specify default options that will be passed through to your url helper definition, e.g:

direct :browse, page: 1, size: 10 do |options|
  [ :products, options.merge(params.permit(:page, :size).to_h.symbolize_keys) ]

In this instance the `params` object comes from the context in which the the block is executed, e.g. generating a url inside a controller action or a view. If the block is executed where there isn’t a params object such as this:


then it will raise a `NameError`. Because of this you need to be aware of the context in which you will use your custom url helper when defining it.

NOTE: The `direct` method can’t be used inside of a scope block such as `namespace` or `scope` and will raise an error if it detects that it is.

Show source
Register or log in to add new notes.