Cześć
Mam taki problem otóż mam dwie tabele Site i Booked
Chodzi o to , że można zabookować jakaś powierzchnię na stronie.
Mam relacje.
Site: belongs_to :booked
Booked : has_many :sites
Link z Site index do new booked to
<%@site.each do |site|%>
<%= link_to "Booked" ,new_site_booked_path(site),class: "label label-warning"%>
<%end%>
I controller booked
def new
@site = Site.find(params[:site_id])
@booked = @site.booked.new
end
Niestety wysypuje mi błąd
undefined method `new’ for nil:NilClass
@booked = @site.booked.new
Macie może jakieś pomysły? Już dłuższy czas dzisiaj z tym tematem siedze i niestety…
W widoku nie musisz iterować @site, bo z tego co widzę do niej przypisujesz jedną konkretną stronę - obiekt, nie kilka (Find w przeciwieństwie do Where zwraca jeden wynik, nie tablicę).
Nila dostajesz, bo po prostu nie istenieje obiekt, o podanych parametrach, nie znajduje go i zwraca nila.
Polecam gem ‘pry-byebug’ lub jeśli są to Railsy 4.2.0, gem’a byebug.
W metodzie new zrób coś takiego:
def new
@site = tutaj przypisanie
byebug (albo binding.pry)
...
end
W terminalu, w karcie, której masz odpalony serwer odpali się debugger, będziesz mógł sprawdzić każdą zmienna, co pod nimi jest przypisane.
czy oprócz tego że masz w tych modelach belongs_to i has_many to na poziomie bazy masz referencję do booked dla tabeli sites (czyli czy jest kolumna booked_id w tabeli sites)? Sprawdź sobie w schema.rb
Jeśli nie masz to musisz sobie przemigrować bazę, np wykonując migrację add_reference :comments, :game, index: true,
wtedy gdy dla jakiegoś obiektu Booked utworzysz Site, to w tym w bazie danych (tabela sites) nowy rekord będzie miał wypelniony booked_id.
I taka uwaga na koniec, dla @site.booked.new, część @site.booked zwróci Ci obiekt Booked, już konkretną instancję i nie musisz na niej wywoływać new
Wydaje mi się że powinno być site_booked_path.
W przyszłości jeśli chcesz wiedzieć jakie masz route-y dostępne użyj w terminalu bundle exec rake routes
Jakkolwiek dziwnie to nie brzmi, to jednak powinno być resources :bookeds
Ale routing z kolei kłóci się trochę z kierunkiem relacji w modelach, więc w sumie radzę przemyśleć jeszcze tą kwestię.