Вы можете объявить два «продукта» маршрута - один под пользователями, а другой независимый от пользователей, например:
map.resources: продукты
map.resources: users,: has_many =>: products
Они оба будут искать «ProductsController # index», но у второго будет «user_id», предварительно заполненный из маршрута (примечание: «user_id», а не только «id»)
Таким образом, вы можете проверить это в методе index и отобразить различные элементы в зависимости от того, присутствует ли он.
Вам потребуется добавить before_filter в ProductController, чтобы на самом деле создать экземпляр модели пользователя, прежде чем вы сможете ее использовать, например:
before_filter :get_user # put any exceptions here
def index
@products = @user.present? ? @user.products : Product.all
end
# all the other actions here...
# somewhere near the bottom...
private
def get_user
@user = User.find(params[:user_id])
end
Если вы действительно хотите отобразить совершенно разные представления, вы можете просто сделать это явно в действии index, например:
def index
@products = @user.present? ? @user.products : Product.all
if @user.present?
return render(:action => :user_view) # or whatever...
end
# will render the default template...
end