2015-01-25 2 views
0
class Player < ActiveRecord::Base 
belongs_to :team 
end 

class Team < ActiveRecord::Base 
has_many :players 
end 

схема: ActiveRecord :: Schema.define (версия: 20150125183356) сделатьПочему моя ассоциация работает неправильно?

create_table "players", force: :cascade do |t| 
t.string "player_name" 
t.float "price" 
t.datetime "created_at", null: false 
t.datetime "updated_at", null: false 
t.integer "team_id" 
end 

create_table "teams", force: :cascade do |t| 
t.string "team_name" 
t.datetime "created_at", null: false 
t.datetime "updated_at", null: false 
end 

end 

это сценарий

Когда я иду к рельсам консоль и введите

t= Team.new 
t.team_name='ss' 
t.save 
p=Player.new 
p.player_name='sdeas' 
p.price=33.0 
p.save 

тогда, когда я печатаю p.team = t , он отлично работает.

, но когда я типа t.players он показывает мне #<ActiveRecord::Associations::CollectionProxy []>

Я хочу найти игроков для этой команды. Я уверен, что я ошибаюсь, когда я новичок в рельсах.

+0

Работает ли он после ввода 't.reload'? –

+0

yes, t.reload возвращает значения t – user3420043

+0

Теперь попробуйте 't.players' .. –

ответ

0

Все в ваших моделях и схемах выглядит хорошо. Готов поспорить, вы просто испытываете проблемы с консолью.

Во-первых, попробуйте следующее:

t = Team.create(team_name: 'ss') 
p = t.players.new(player_name: 'sdeas', price: 33.0) 
p.save 

Тогда t.playersдолжен возвращать массив игроков.

Во-вторых, вы сохраняете плеер после того, как сделали p.team = t? Если вы этого не сделаете, то запрос БД для t.players не вернет игроков.

+0

Да, я сохранил после этого. \t \t Теперь это работает, когда я пытаюсь Team.first.players, но в чем была проблема раньше? – user3420043

+0

Проблема была в том, что вы не заполнили поле team_id при создании записи игрока. Решение evanbikes (t.players.new (player_name: 'seas', price: 33.0)) делает это для вас, создавая нового игрока в команде (t.players.new). – MikeC

Смежные вопросы