A application_controller nadpisuje metode default_url_options dodajac parametr company_id:
def default_url_options(options = {})
options.merge(company_id: params[:company_id])
end
W routes zdefiniowalem:
scope ‘(:company_id)’, constraints: { company_id: /\d+/ } do
end
Wszystkie url’e wygenerowane przez routes w scope nie generuja i nie dodaja parametru ?company_id=
Natomiast wszystkie pozostale ulr’e dla ktorych routing zdefiniowany jest poza scope maja dolaczony parametr ?company_id
Jest jakas mozliwosc usuniecia tego parametru w takim przypadku?
Probowalem uzyc w application_controller:
def default_url_options(options = {})
ignore_defaults = options.delete(:ignore_defaults)
if ignore_defaults
{}
else
options.merge(company_id: params[:company_id])
end
end
Rozumiem, ze chcesz dla kazdej akcji w scope był wymagany company_id.
Ten route, co zdefiniowałeś robi robotę. Nie trzeba nic więcej.
Jesli companies zdefiniujesz poza scope, to bedzie dobrze.
Szczerze to nie wiem czemu uważasz, ze company_id poza scopem powinno być.
Ja widzę dwie możliwości (oprócz zmiany pomysłu na feature):
-jesli problem wystepuje w CompaniesController, to w tymże controllerze znów zdefinować metode default_url_options (przykryje z ApplicationController).
-jesli potrzebujesz specyficznie dla jakiejs akcji zmiany to możesz uzyć czegoś takiego, co dorzucasz do metody index w controlerze CompaniesController:
self.class.redefine_method("default_url_options") do |a, b| {} end