penso che il modo più pulito per raggiungere tale è quello di personalizzare routes.rb
di file (almeno per i parametri di default statici). Documenti: http://guides.rubyonrails.org/routing.html#customizing-resourceful-routes
predefinito param esempio:
get "/foo(/:bar)" => "my_controller#index", defaults: { bar: "my_default" }
predefinito esempio valore param + portata:
scope '/(:rec_type)', defaults: { rec_type: 'mammo' }, rec_type: /mammo|face/ do
resources :patients
end
Altre opzioni (per restriccions dinamici):
avanzata vincoli di instradamento:
Se sono necessarie ulteriori restrizioni avanzate/dinamiche, dare un'occhiata a questa guida: http://guides.rubyonrails.org/routing.html#advanced-constraints.
default_url_options
Override:
Inoltre, è possibile eseguire l'override default_url_options
metodo per aggiungere automaticamente alcuni attributi (params) utilizzando rotte aiutanti: http://guides.rubyonrails.org/action_controller_overview.html#default-url-options.
È possibile impostare i parametri predefiniti globali per la generazione di URL definendo un metodo denominato default_url_options nel controller. Tale metodo deve restituire un hash con i valori predefiniti desiderati, le cui chiavi devono essere simboli:
class ApplicationController < ActionController::Base
def default_url_options(options = {})
if action_name == 'foo' # or other conditions
options[:bar] = 'your_defaults' # add here your default attributes
end
options
end
end
Override to_param: sistema di routing
Rails chiama to_param
sui modelli per ottenere un valore per il :id
segnaposto. ActiveRecord::Base#to_param
restituisce l'ID di un modello, ma è possibile ridefinire tale metodo nei modelli.Ad esempio, dato:
class Product < ActiveRecord::Base
def to_param
"#{id}-#{title}"
end
end
Questo genera: /products/254-Foo
Ho aggiornato la riga relativa per chiarire che in realtà un valore dinamico viene unito in 'options' (' foo.some_attribute'). – user569825
Non funzionerà in questo modo. Quel parametro deve essere presente nell'url, altrimenti come saprebbero i binari, quale valore di: bar param dovrebbe essere. Quindi, principalmente, la risposta è 'foo_path (foo,: bar => foo.some_attribute)' che genererà url qualcosa come '/ foo /: id? Bar = some_attr_value' – intale
Funziona già - solo che non è usato quando chiamato dai controller. "Sa" perché è assegnato esplicitamente il valore di "foo.some_attribute". – user569825