2012-01-20 14 views
10

Mam model o nazwie ImplicitTest. Nazywa się to tym, że obiekt Ruby o nazwie Test po prostu łamie wiele rzeczy w Railsach.Jak pisać routing, gdy nazwa modelu zasobu nie pasuje do ścieżki lub kontrolera

Jednak nadal chcę wystawić go jako RESTful zasobu jako test (np. /tests, /test/1/edit i tak dalej). Co więcej, byłoby świetnie zachować kontroler jako TestsController, choć to mniej ważne.

Robiłem to poprzez proste resources :tests linię w moim pliku routes.rb, ale to nie dla relaksującego formach (np <%= form_for @test ... > - to podnosi, że @test obiekt jest typu ImplciitTest i próbuje odnośnika implicit_test_path który

Próbowałem dodać opcje form_for, ale doszedłem do wniosku, że aby formularz działał zarówno dla akcji new, jak i dla edit, nie było jednego, zunifikowanego sposobu zadawania form_for(), aby użyć innego prefiksu do wyszukiwania nazw ścieżek

Tak więc próbowałem podejść do problemu z routingu bok. Czy istnieje linia mogę dodać do pliku trasy, które pozwolą mi:

  1. Mają model o nazwie ImplicitTest
  2. Mają ścieżki jako/test
  3. Użyj <% = form_for @test .. .%> tag nadal
  4. Trzymać regulator jako TestsController (opcjonalnie)

wiem, że odchodząc Golden Path to zrobić, ale Rails nie pozwalając mi skorzystać z testu jako nazwy modelu, ale to to nazwa, której użytkownicy będą się spodziewać zobacz w adresie URL tego zasobu, więc mam nadzieję, że istnieją proste opcje routingu, które to umożliwiają.

Odpowiedz

8

Wszystko, co musisz zrobić, to ustawić opcję :path na trasie:

resources :implicit_tests, :path => '/test' 

nadal będzie używać standardowego implicit_tests_path pomocnik w ten sposób, zbyt, więc kod nie musi odbiegać zmienić Schemat URL.

+2

To nie wydaje się dopasowywać nazwę contollera, ale dostosowując ją do 'resources: implicit_tests,: controller =>" tests ",: path =>" tests "' wydawało się dodać, że w. – Phantomwhale

1

Chociaż patrząc na odpowiedź coreyward jest, natknąłem się na krótszy, ale mniej intuicyjny sposób uzyskiwania czego potrzebuję:

resources :tests, :as => "implicit_tests"

Są one w zasadzie robi to samo (biorąc pod uwagę dodatkowe :controller przełącznik Dodałem w komentarzach)? A może jest preferowany?

+0

Możesz na pewno zrobić to również, ale mieszane odniesienia do kontrolera Implicit Tests i modelu z nazwami, które nie pasują do "Rails Way" zaczynają wprowadzać zamieszanie. – coreyward

+1

Ach, ok, pomyślałem tak bardzo. Chętnie próbuję pozostać tak blisko toru, jak tylko mogę, więc pójdę z twoją odpowiedzią. Może również wrócić do posiadania ImplicitTestController, aby utrzymać niską liczbę opcji routingu i utrzymać nazwę kontrolera bliżej nazwy modelu, co prawdopodobnie jest lepsze niż trzymanie go bliżej nazwy ścieżki; w zasadzie to, co sugerujesz powyżej. – Phantomwhale

Powiązane problemy