Jak zignorowac parametr w url

Witam,

mam taki problem:

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

a w widoku:

<%= link_to companies_path(:ignore_defaults => true)

Niestety URL wyglada nastepujaco:

companies?company_id=1&ignore_defaults=true

Nie obejdzie się bez tego?

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.

No wlasnie scope bez default_url_options nie jest w stanie pobrac wartosci dla biezacej firmy. Bez tej metody nie jest powielana wartosc id w ulr’ach.

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

Nadpisywanie metody co dziwne nie dziala. Nadal widze ten parametr: company_id. Dodalem companies do scope wg zalecen i rozwiazalo to problem.

Dzieki