Per Reasons ™, voglio che un controller gestisca le richieste html e un altro gestisca le richieste di API json.Rails routing: vincoli di formato quando nessuno è specificato
Ho questo nei miei percorsi:
scope module: :api, as: :api do
constraints format: :json do
resources :users
end
end
constraints format: :html do
resources :users
end
Questa grande opera quando l'URL sfoggia un suffisso: /users.json
mi passa per la Api::UsersController
à la api_users_path
; /users.html
passa attraverso il mio UsersController
à la users_path
.
Tuttavia, ciò non si comporta come previsto quando l'URL non contiene suffisso. L'implementazione dei vincoli come lambda mostra che le cose vanno storte:
e tuttavia finisce nel controller api.
Nessun giochetto con classi di vincoli personalizzati o lambda o qualsiasi cosa impedisce ai binari di selezionare il primo percorso definito se nessuno dei vincoli corrisponde.
non riesco a trovare un modo per scrivere un vincolo che cattura quando l'URL manca un suffisso, e non mi sento come se dovessi avere to request.format == :html
rapporti vero quando sto navigando /users
. Perché il secondo vincolo non è quello?
Inoltre, mentre potrei "sistemarlo" cambiando l'ordine di questi due, preferirei piuttosto sapere perché i miei vincoli non funzionano correttamente.
Qualcuno sa come applicare questi vincoli in modo diverso per attivare in modo efficace qualunque sia il formato, non solo il suffisso URL, o avere un vincolo esplicito che non contiene suffisso di formato?
la sopraelevazione cattura secondo contraint che il percorso doesnt partita – apneadiving
Perché non si trova semplicemente il formato della richiesta se stessi per tutte le azioni in vostro api ? – apneadiving
in realtà, dal momento che lo spazio dei nomi del controller non capisco perché hai bisogno di vincoli di instradamento – apneadiving