Jak wyciągnąć z :user_id :username

Aplikacja działa tak, że rezerwuje miejsce dla każdego usera dla konkretnego eventu.

Tabela Users -> :id, :username
Tabela Events -> :id
Tabela Seats -> :event_id, :user_id

Poniżej kod który wyświetla listę miejsc.

[code]<% seats.each do |seat| %>

<%= seat.event_id %> <%= seat.user_id %> <%= link_to 'Show', seat %> <%= link_to 'Edit', edit_seat_path(seat) %> <%= link_to 'Destroy', seat, :confirm => 'Are you sure?', :method => :delete %> <% end %>[/code] Jak za pomocą seat.user_id wyświetlić obok :username? Możecie podrzucić jakieś wskazówki?

User.find(seat.user_id).username

ale to nie jest zbyt dobre, masz pola dobre tylko spiąć to relacją wtedy będzisz miał z jednego obiektu dostęp do drugiego.

seat.user.username

zakładając poniższe relacje:

[code=ruby]class User < ActiveRecord::Base

has_many :seats
has_many :events, :through => :seats
end

class Event < ActiveRecord::Base

has_many :seats
has_many :users, :through => :seats
end

class Seat < ActiveRecord::Base

belongs_to :user
belongs_to :event
end[/code]
(has_many :through nie potrzebujesz akurat do tego przykładu ale zapewne przyda ci się w innych miejscach, umożliwi user.events oraz event.users )

@gotar: fuj, tak brzydko uczysz ludzi pisać a tu jest zielona szkoła ;p - pierwsza rzecz jaką człowiek zapamięta później będzie powtarzał do momentu aż ktoś mu nie wypomni, że babole tworzy.

Jak masz zrobione dobrze relacje to powinno zadziałać poprzez:
<%= seat.user.username %>

Edycja:
Ups za wolno. :slight_smile:

narazie mam spięte to relacją

Event has_many seats

Czy to wystarczy?

i wtedy seat.username?

Ups za wolno :slight_smile:

Nie wystarczy. :stuck_out_tongue:

Zrób tak jak napisał @hosiawak
Albo tak jak tutaj wskazują:
http://guides.rubyonrails.org/association_basics.html#the-has_many-through-association

Edycja:
Poprawiony link.

Przecież napisałem że tak jest źle i że jak ma relacje, czy też jak je zrobi to będzie miał dostęp z jednego obiektu do drugiego, a na pytanie odpowiedziałem ;]

Dzięki wielkie :slight_smile: szczególnie za dokumentację