开发者

Why would you want to use the same controller to handle a singular and a plural route?

开发者 https://www.devze.com 2023-01-06 02:46 出处:网络
I\'m working on a rails app and using a singular resource. However the controller name for the singular resource is plural.

I'm working on a rails app and using a singular resource. However the controller name for the singular resource is plural. Eg map.resource activity_report expectes th开发者_如何学JAVAe activity_reports_controller.

The explanation given in the rails 3 guide is: "... you might want to use the same controller for a singular route and a plural route..." That is a reasonable explanation, but what is the use case for using the same controller to handle a singular route and a plural route?


In a RESTful Rails application there is usually a mapping of one controller per RESTful resource. For example, let's say we wanted a controller to process user logins (/session) but also to provide a list of users who are currently logged in (/sessions). Logically we could put both of those responsibilities within a SessionsController:

class SessionsController < ApplicationController

  # GET /sessions
  # Display a list of logged in users
  def index
    ...
  end

  # GET /session/new      
  # Display the login form
  def new
    ...
  end

  # POST /session
  # Authenticate a user
  def create
    ...
  end
end

An alternative would be to split the functionality for listing logged in users out into a separate administration controller.


You can use it.

class UsersController < Application
end

map.resource :user
map.resources :users


Another situation in which I can imagine using it would be, let's say (and this isn't necessarily the business model you'd want, but stay with me for a moment) you are going to make a site of film reviews, and film information. So, on the one hand you'd have the link to your list of the latest reviews be a plural resource route, something like this:

http://yoursite.com/reviews?count=5

So, in this case, you have a controller for the collection, right? But you're only going to review each movie once. So what if you wanted to provide an easy access to a movie's review?

http://yoursite.com/movies/pirates_of_the_carribean_2/review

Well, there's a nested single resource route, because a movie has_one review, right?

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号