[RoR] Problem z plikiem routes.rb

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):

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:

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:

/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.

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:

Rails.application.routes.draw do
  get '/ads/:id', to: :show, controller: 'ads'
  # etc
end
2

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

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

1

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1