[RoR] Problem z plikiem routes.rb

[RoR] Problem z plikiem routes.rb
CH
  • Rejestracja:ponad 8 lat
  • Ostatnio:23 dni
  • Postów:128
0

Witam.

Niedawno rozpocząłem naukę języka Ruby po czym ostatnio zacząłem czytać książkę z serii "Head First: RoR". Niestety, już przy 2 rozdziale pojawił się problem. Mam w nim edytować plik routes.rb (w katalogu config). Niestety, od czasu pisania książki RoR się chyba troche zmieniło ...
Miałem zaedytować go by wyglądał tak (to chyba wersja Rails 2 coś takiego):

Kopiuj
ActionController::Routing::Routes.draw do |map|
    map.connect '/ads/:id', :controller=>'ads', :action=>'show'
    map.connect ':controller/:action/:id'
    map.connect ':controller/:action/:id.:format'
end

Okazało się, że tak nie mogę...(dostawałem błąd o niezainicjalizowanej stałej)... próbowałem zrobić coś takiego:

Kopiuj
Rails.application.routes.draw do |map|
map.connect '/ads/:id', :controller=>'ads', :action=>'show'
map.connect ':controller/:action/:id'
	map.connect ':controller/:action/:id.:format'
	

  	
	end

Też bez dobrego skutku:
otrzymuje coś takiego w konsoli:

Kopiuj
/home/tomek/mebay/config/routes.rb:2:in `block in <top (required)>': undefined method `connect' for nil:NilClass (NoMethodError)

Wie ktoś może o co chodzi? (gdzieś widziałem, że to mogło być spowodowane jakimś brakiem danych w db ale, zgodnie z tym co było w książce, przeniosłem sobie plik z bazą danych...)...

Z góry dzięki.

Pipes
  • Rejestracja:około 11 lat
  • Ostatnio:ponad 3 lata
  • Postów:459
3

Jeżeli się uczysz Railsów 5, to ucz się z tutoriali. Stare książki zrobią więcej szkody niż pożytku. Znalazłem przykładowy projekt w Rails 5.1 i oto przykładowy routes.rb.

Błąd, który się pojawił informuje, że zmienna blokowa nie ma takiej metody. Ba, zmienna blokowa jest nilem ;)

Jeśli zobaczyłeś przykładowy routes.rb, to sam widzisz, że nie tworzysz zmiennej w bloku dla metody Rails.application.routes.draw, lecz po prostu wołasz tam funkcje, które generują Ci ścieżki, a te funkcje masz opisane tutaj.

Twoje rozwiązanie będzie bardziej rozbudowaną wersją tego:

Kopiuj
Rails.application.routes.draw do
  get '/ads/:id', to: :show, controller: 'ads'
  # etc
end
Andy Misio
  • Rejestracja:około 9 lat
  • Ostatnio:ponad 7 lat
  • Postów:22
2

Można jeszcze użyć na przykład takiej składni, która jest bliższa twojej:
Przykład:

Kopiuj
Rails.application.routes.draw do
  match '/ads/:id', :controller=>'ads', :action=>'show', via: :get
  match '/ads/create', :controller=>'ads', :action=>'create', via: :post
  match '/ads/:id/update', :controller=>'ads', :action=>'update', via: :patch
end


Brak
CH
  • Rejestracja:ponad 8 lat
  • Ostatnio:23 dni
  • Postów:128
1

Dzięki, już zrezygnowałem z pomysłu uczenia się z tej książki ;)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.