Witam. co muszę zrobić żeby podczas wypisywania danych z tabeli Trening wypisało również dane z połączonej tabeli Place. Poniżej szczegóły bo nie umiem tego obrać w słowa
index.html.erb
[code]…
<% @trenings.each do |trening| %>
<%= trening.place_id %>
<--- teraz wypisuje ID Place a chciałbym żeby wypisało dane z kolumny Name z tabli Place
<% end %>
...[/code]
[code]class TreningsController < ApplicationController
def index
@trenings = Trening.all
end
end[/code]
[code]class Place < ActiveRecord::Base
has_many :trenings
end[/code]
[code]class Trening < ActiveRecord::Base
belongs_to :place
accepts_nested_attributes_for :place
end[/code]
Z góry dziękuje za pomoc i pozdrawiam.
trening.places.each do |place|
place.something
end
[/quote]
Tam ta relacja jest na odwrót, jeden trening ma jedno miejsce, ale w jednym miejscu może być wiele treningów : )
PS. Pytanie “Jaki dzień tygodnia mamy dzisiaj?” o 2.30 w nocy wcale nie jest takie proste : P
Bo pewnie trening nie posiada pola name, jak założył Świstak. Spróbuj wyświetlać id w ten sposób:
<%= trening.place.id %>
Jeśli zadziała to spójrz na nowy kod. Teraz na stary (trening.place_id). Teraz na nowy. Możesz w ten sposób odnieść się do dowolnego pola z obiektu place. I’m on a horse.
[code]Started GET “/trenings” for 127.0.0.1 at Sat Feb 25 20:25:56 +0100 2012
Processing by TreningsController#index as HTML
User Load (0.2ms) SELECT “users”.* FROM “users” WHERE “users”.“id” = ? LIMIT 1 [[“id”, 1]]
Trening Load (0.6ms) SELECT “trenings”.* FROM “trenings” WHERE “trenings”.“user_id” = 1
Rendered trenings/index.html.erb within layouts/application (36.1ms)
Completed 500 Internal Server Error in 104ms
ActionView::Template::Error (Called id for nil, which would mistakenly be 4 – if you really wanted the id of nil, use object_id):
15:
16: <% @trenings.each do |trening| %>
17:
sorry źle zrobiłem. <%= trening.place_id %> działa i działo wcześniej. a co do istnienia pola name to istnieje. niże plik schema.rb
schema.rb
create_table "places", :force => true do |t|
t.string "name"
t.integer "place_favorite", :default => 0
t.integer "place_default", :default => 0
t.integer "user_id"
t.datetime "created_at"
t.datetime "updated_at"
end
tak teraz myśle że mogę mieć konflikt nazw. w modelu tabela nazywa sie PLACE a w pliku schema PLACES. nie wiem czemu tak się stało.
Mój błąd. Kod Świstaka był okej. Po prostu do danego treningu nie masz przypisanego miejsca. Bardzo wyraźnie mówi o tym komunikat o błędzie:
Called id for nil
Proponuję żebyś przed zajmowaniem się Railsami najpierw nauczył się programować w „czystym” Rubym. Pozwoli Ci to zrozumieć komunikaty błędów, powiązania między obiektami i wiele z „magii” Railsów.
[quote=nowohucjanin]sorry źle zrobiłem. <%= trening.place_id %> działa i działo wcześniej. a co do istnienia pola name to istnieje. niże plik schema.rb
schema.rb
create_table "places", :force => true do |t|
t.string "name"
t.integer "place_favorite", :default => 0
t.integer "place_default", :default => 0
t.integer "user_id"
t.datetime "created_at"
t.datetime "updated_at"
end
tak teraz myśle że mogę mieć konflikt nazw. w modelu tabela nazywa sie PLACE a w pliku schema PLACES. nie wiem czemu tak się stało.[/quote]
Hm, ale nic nie mieszasz w schema? Wszystkie operacje na bazie danych powinny być w db/migrations. O migracjach info tutaj: http://guides.rubyonrails.org/migrations.html A http://guides.rubyonrails.org to w ogóle bardzo dobry i całkiem szeroki tutorial : )
nic nie mieszam w schema. chciałem tylko pokazać ze to nie bład braku komórki name tylko jakiś inny. zastanawiam się tylko od czego zależy dodanie przez railsy końcówki “s” do nazwy modelu przy tworzeniu rusztowania.
Taka konwencja. “Convention over Configuration” i te sprawy
model: Article
tabela: articles
kontroler: ArticlesController
foreign key: article_id
itd.
Jak nie wiesz takich rzeczy, to serio zacznij od tego co wrzucił swistak35 - http://guides.rubyonrails.org/. Będzie Ci łatwiej niż działać metodą prób i błędów nie wiedząc co, jak i dlaczego tak.