tengo las siguientes rutas:rieles manera de manejar la acción que está disponible en múltiples rutas
resources :users do
# List reviews made by user
resources :reviews, :only => [ :index ]
end
resources :products do
# List reviews by product, and provide :product_id for creation
resources :reviews, :only => [ :index, :new, :create ]
end
# Other actions don't depend on other resources
resources :reviews, :except => [ :index, :new, :create ]
todo se ve bien, excepto ReviewsController#index
:
def index
if params[:user_id]
@reviews = Review.find_all_by_user_id params[:user_id]
else
@reviews = Review.find_all_by_product_id params[:product_id]
end
respond_with @reviews
end
Me preguntaba si hay una solución estándar a la problema anterior, o si hay una mejor manera de hacerlo.
Muy buena sugerencia. Creo que debería deshacerme de mi mentalidad de "apegarse a las acciones RESTful" :) –
A veces funciona, otras veces simplemente se pone en el camino. Si deseas mantenerte en acciones totalmente relajadas, puedes sobrescribir el controlador que también lo maneja, para que puedas tener un ProductReviewsController relajante y un UserController relajante. Por supuesto, ya está utilizando muchas declaraciones excepto y solo, por lo que el uso de coincidencias url explícitas, como mi ejemplo, podría ser la mejor solución para usted. –
He escuchado que algunos se quedan demasiado envueltos en el descanso, y estoy de acuerdo en que a veces es necesario que estalle, pero parece que no es así. En realidad, al crear dos controladores, está entrando en el estilo de descanso, de dos recursos (solo la acción de índice). En este caso, lo mantendría en un controlador y cargaría apropiado para los params. – DGM