2014-01-31 40 views
0

爲什麼我的程序試圖找到teamplayers.player_id(不存在)試圖運行這條線時:<%= select_tag "test3", options_from_collection_for_select(Teamplayer.joins(:live_player), "teamid", "playerid") %>找不到在軌列

我想加入的字段playerid(從teamplayers)和NID (來自玩家)。我試圖創建一個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.teamidteamplayer.playerid來創建每個選項。

假設你Teamplayer實例有name屬性,只是嘗試以下,看看它是如何工作:

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

注意,如果沒有第四個參數,軌道會不知道哪個選項應該具有某種形式,來選擇你已經選擇了數據。例如,在由於驗證錯誤而無法創建/更新記錄之後重新呈現表單。

+0

它沒有名稱屬性。這些字段是id,teamid,playerid,如果我創建一個遷移模型將取代我的表定義? – user3240928

+0

您可以將方法的委託添加到關聯的對象並在這裏使用。例如'delegate:team_name,to::team',那麼你可以使用'team_name'作爲text_method? – Jon

+0

如何獲得text_method集合中的2個字段? – user3240928