0

Railsが初めてで、以下を実装するための最も「railsy」な方法を見つけようとしています。

下記のとおり:

class Team
  has_many :team_memberships
  has_many :players, through: :team_memberships
end

class TeamMembership
  acts_as_list scope: :team_id
  belongs_to :team
  belongs_to :player
end

class Player
  has_many :team_memberships
  has_many :teams, through: team_memberships
end

私の TeamMembership モデルには追加の列position:integercaptain:booleanあり、wicket_keeper:boolean(私がまだ何に取り組んでいるのか教えていただけますか.. :))

以下を考えると:

t = Team.first
p = Player.first(11)
t.players << p

これにより、TeamMembership モデルにプレーヤー オブジェクトが適切に取り込まれます。

私が試してみると:

t.players[4][:captain] = true

ActiveModel::MissingAttributeError: can't write unknown attribute-キャプテン」で失敗します

ただし、次のように設定できます。

t.team_memberships[4][:captain] = true

しかし、これは間違っているように感じます。

私が達成しようとしていることを見る必要があるとすれば、これは次のとおりです。

A) このタスクにアプローチする最善の方法 - もしそうなら、プレイヤーから直接キャプテン属性を取得して設定する方法はありますか (それが理にかなっている場合)

また

B)私が見逃している、より優れた、より「レールシーな」アプローチはありますか。

4

1 に答える 1

0

あなたが持っているものt.team_memberships[4][:captain] = trueは正しいと思います。これは、TeamMembershipモデルposition:integer, . 私の理解では、TeamMembershipモデルを設定しました。ただし、次の場合: キャプテン属性にアクセスしようとしています。これはTeamMembershipモデルの一部です。したがって、私が言おうとしているのは、インスタンスTeamMembershipの属性である属性Captainにアクセスしようとしているということです。これに加えて、このエラーはプレーヤーにあるものから来ていると思いますcaptain:booleanwicket_keeper:booleant.players[4][:captain] = truehas_many :team_membershipsクラス、これは関連付けられたモデルを指します。TeamMembershipテーブルで player_id を探していると思います。何をしようとしているのかを明確にするのに役立つ次のリンクを参照してください。

API - Ruby on Rails - belongs_to

Guide Ruby on Rails - Belongs_to_association-referenceのセクション 4.1.2.6:foreign_key を見てください。

于 2013-06-11T12:13:28.627 に答える