Asocjacje wielu modeli

Witam, potrzebuję podpowiedzi w jaki sposób powinienem zapisać taką asocjacje, że mam modele user, duel, bet. I teraz na stronie mam userów, do tego są duele, w duelach można robić bety i to zrobiłem. Teraz chciałem powiązać jeszcze userów z tymi betami, tj user może robić nowy bet ale tak abym mógł się do niego dostać poprzez /duels/duel_id/bets oraz users/user_id/bets. Chcę zrobić tak jakby dwie oddzielne asocjacje ale tak aby w bazie danych była tylko jedna tabela bets z polami user_id oraz duel_id. Nie wiem jak teraz mam zrobić akcję create, tworzę nowe bety poprzez new_duel_bet_path(@duel) i teraz chciałbym w to wplątać ten user id. Nie chcę tworzyć nowych betów przez new_user_bet_path(@user). Czy mogę zrobić tak, że przed utworzeniem betu odpalę callback który uzupełni mi pole user_id ? Trochę namieszałem ale może ktoś zrozumie o co mi chodzi ;p

domyslam sie ze user jest zalogowany, takze moze po prostu w kontrolerze przy tworzeniu bet, ustawilbys mu zwyczajnie user_id z zalogowanego usera. jezeli dobrze to rozumiem :slight_smile:

no tak user jest zalogowany, chciałem to zrobić tak, że używam callbacka jednak nie mogę w modelu bet dostać się do zmiennej @user z kontrolera która odpowiada zalogowanemu userowi. Ale nawet jeśli dopisał bym ten user_id to pojawia się problem z widokiem betów. Ponieważ mam tylko jedną metodę show dla kontrolera bet to nie mogę się odwołać do tych betów na dwa sposoby metoda show wygląda tak

def show @duel = Duel.find(params[:duel_id]) @bet = Bet.find(params[:id]) end
problem pojawia się jeśli chcę pokazać takie bety /users/user_id/bets ponieważ nie mam duel_id co jest oczywiste. Czy w ogóle da się zrobić tak jak ja to sobie wymyśliłem ?

Przyjmuję, że nowe bety tworzysz pod adresem /duels/duel_id/bets/new i formularz jest podpięty pod /duels/duel_id/bets. Wtedy w BetsController:

[code Ruby]before_filter :find_duel, :find_user # to można jeszcze poprawić, żeby niepotrzebnie nie wywoływało tych metod

def index
if @user
@bets = @user.bets
else
@bets = @duel.bets
end
end

def create
@bet = current_user.bets.build(:duel => @duel)

end

private

def find_duel
@duel = Duel.find(params[:duel_id]) if params[:duel_id]
end

def find_user
@user = User.find(params[:user_id] if params[:user_id]
end[/code]

Takie coś jako pierwsze przyszło mi do głowy - nie wiem, może istnieje lepsza metoda, aczkolwiek dość dawno nic w RoR nie pisałem.

ok, dzięki to pomogło