在rails中找不到列

时间:2014-01-31 06:11:51

标签: ruby-on-rails

为什么我的程序在尝试运行此行时尝试查找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

1 个答案:

答案 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.teamidteamplayer.playerid来创建每个选项。

假设您的Teamplayer个实例具有name属性,请尝试以下操作以了解其工作原理:

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

请注意,如果没有第4个参数,rails将不知道应该在已选择数据的表单中选择哪个选项。例如,由于验证错误而无法创建/更新记录后重新呈现表单。