instance method
resource
Ruby on Rails 8.1.2
Since v3.0.20Signature
resource(*resources, concerns: nil, **options, &block)
Sometimes, you have a resource that clients always look up without referencing an ID. A common example, /profile always shows the profile of the currently logged in user. In this case, you can use a singular resource to map /profile (rather than /profile/:id) to the show action:
resource :profile
This creates six different routes in your application, all mapping to the Profiles controller (note that the controller is named after the plural):
GET /profile/new GET /profile GET /profile/edit PATCH/PUT /profile DELETE /profile POST /profile
If you want instances of a model to work with this resource via record identification (e.g. in form_with or redirect_to), you will need to call resolve:
resource :profile resolve('Profile') { [:profile] } # Enables this to work with singular routes: form_with(model: @profile) {}
Options
Takes same options as resources
Parameters
-
resourcesrest -
concernskey = nil -
optionskeyrest -
blockblock
Source
# File actionpack/lib/action_dispatch/routing/mapper.rb, line 1490
def resource(*resources, concerns: nil, **options, &block)
if resources.grep(Hash).any? && (deprecated_options = resources.extract_options!)
concerns = assign_deprecated_option(deprecated_options, :concerns, :resource) if deprecated_options.key?(:concerns)
assign_deprecated_options(deprecated_options, options, :resource)
end
if apply_common_behavior_for(:resource, resources, concerns:, **options, &block)
return self
end
with_scope_level(:resource) do
options = apply_action_options :resource, options
resource_scope(SingletonResource.new(resources.pop, api_only?, @scope[:shallow], **options)) do
yield if block_given?
concerns(*concerns) if concerns
new do
get :new
end if parent_resource.actions.include?(:new)
set_member_mappings_for_resource
collection do
post :create
end if parent_resource.actions.include?(:create)
end
end
self
end
Defined in actionpack/lib/action_dispatch/routing/mapper.rb line 1490
· View on GitHub
· Improve this page
· Find usages on GitHub
Defined in ActionDispatch::Routing::Mapper::Resources