2014-01-31 1 views
0

Почему моя программа пытается найти teamplayers.player_id (который не существует) при попытке запустить эту строку: <%= select_tag "test3", options_from_collection_for_select(Teamplayer.joins(:live_player), "teamid", "playerid") %>Не может найти колонку в рельсах

Я хочу присоединиться на поля playerid (от teamplayers) и Ниды (от игроков). Я попытался создать foriegn ключ, но это не сработало

UPDATE Вот мое teamplayers мигрировать файл, нет никакого имени атрибута, связанные с этим именем для playerid, который хранится в этой таблице в игроках Таблица.

class CreateTeamplayers < ActiveRecord::Migration 
def change 
    create_table :teamplayers do |t| 
    t.string :playerid 
    t.string :teamid 

    t.timestamps 
    end 
end 
end 
+0

Вы можете поделиться своей архитектурой БД? – Rinku

+0

Вы хотите поля таблиц или моделей? – user3240928

ответ

1

options_from_collection_for_select подпись метода выглядит следующим образом:

options_from_collection_for_select(collection, value_method, text_method, selected = nil) 

Так вы передаете в коллекции Teamplayer.joins(:live_player), метод значения teamid и метод текста playerid.

Это означает, что когда он пытается создать ваши варианты выбора, он будет вызывать teamplayer.teamid и teamplayer.playerid для каждого члена коллекции, чтобы создать каждый вариант.

Если предположить, что ваши Teamplayer экземпляры имеют атрибут name, попробуйте следующее, чтобы увидеть, как это работает:

options_from_collection_for_select(Teamplayer.joins(:live_player), 'id', 'name') 

Обратите внимание, что без 4-го аргумента, рельсы не будет знать, какой вариант должен быть выбран в форме, где вы уже выбрали данные. Например, при повторном рендеринге формы после сбоя при создании/обновлении записи из-за ошибок проверки.

+0

у него нет атрибута имени. поля id, teamid, playerid, если я создаю модель миграции, которая заменит мои определения таблиц? – user3240928

+0

Вы можете добавить делеги методов к связанным объектам и использовать их здесь. Например, 'delegate: team_name, to:: team', то вы можете использовать' team_name' как text_method? – Jon

+0

Как получить 2 поля в коллекции для text_method? – user3240928

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