【发布时间】:2018-04-19 16:57:52
【问题描述】:
我希望能够在视图中以这种方式调用另一个表中的值。
<%= @team.r1.players.full_name %>
<%= @team.r2.players.full_name %>
...
<%= @team.r2.players.full_name %>
r1 到 r10 是保存玩家 ID 的列。
模型非常简单,看起来像这样。
class Player < ApplicationRecord
has_and_belongs_to_many :teams
end
class Team < ApplicationRecord
belongs_to :user
has_many :players
end
导致的错误是 3:Integer 的未定义方法 `players'。我尝试尝试单数和复数版本来拉它,但发生同样的错误。看起来你可能可以做一个连接表,但这并不理想或做一个 has_many :through 关联。
架构
create_table "players", force: :cascade do |t|
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "full_name"
end
create_table "team_players", force: :cascade do |t|
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "teams", force: :cascade do |t|
t.bigint "user_id"
t.string "team_name"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "r1"
t.integer "r2"
t.integer "r3"
t.integer "r4"
t.integer "r5"
t.integer "r6"
t.integer "r7"
t.integer "r8"
t.integer "r9"
t.integer "r10"
t.index ["user_id"], name: "index_teams_on_user_id"
end
我通过这种方式在团队中设置更新/添加球员。
<%= f.collection_select(:r1, Player.all, :id, :full_name , {required: true, include_blank: false}, {class: 'uk-input'}) %>
【问题讨论】:
-
这个 r1, r2 保存玩家 ID 对我来说似乎很奇怪,但你应该可以做到 @team.players.find(@team.r1)
-
我应该更清楚。 r1到r10基本上是设置阵容。把它想象成一个名册。我确实尝试了您的方法,并认为它应该有效。 PG::UndefinedColumn: 错误:列 player.team_id 不存在
标签: ruby-on-rails