instance method
resource
Ruby on Rails 7.1.6
Since v3.0.20Signature
resource(*resources, &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 -
blockblock
Source
# File actionpack/lib/action_dispatch/routing/mapper.rb, line 1340
def resource(*resources, &block)
options = resources.extract_options!.dup
if apply_common_behavior_for(:resource, resources, options, &block)
return self
end
with_scope_level(:resource) do
options = apply_action_options options
resource_scope(SingletonResource.new(resources.pop, api_only?, @scope[:shallow], options)) do
yield if block_given?
concerns(options[:concerns]) if options[: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 1340
· View on GitHub
· Improve this page
· Find usages on GitHub
Defined in ActionDispatch::Routing::Mapper::Resources