为什么我的程序在尝试运行此行时尝试查找teamplayers.player_id(不存在):<%= select_tag "test3", options_from_collection_for_select(Teamplayer.joins(:live_player), "teamid", "playerid") %>
我想加入球员(来自teamplayers)和Nid(来自玩家)。我尝试创建一个foriegn键但是没有用
更新 这是我的teamplayers migrate文件,没有名称属性,存储在此表中的playerid的名称相关位于player表中。
class CreateTeamplayers < ActiveRecord::Migration
def change
create_table :teamplayers do |t|
t.string :playerid
t.string :teamid
t.timestamps
end
end
end
答案 0 :(得分: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个参数,rails将不知道应该在已选择数据的表单中选择哪个选项。例如,由于验证错误而无法创建/更新记录后重新呈现表单。