あなたはhas_many_through
関連付けを使用することができますが、大体このような:
class Bill < ActiveRecord::Base
has_many :sponsorships, -> { where(kind: :primary) }, class_name: "Sponsorship"
has_many :cosponsorships, -> { where(kind: :secondary) }, class_name: "Sponsorship"
has_many :sponsors, class_name: 'CongressPerson', through: :sponsorships
has_many :cosponsors, class_name: 'CongressPerson', through: :cosponsorships
end
class Sponsorship < ActiveRecord::Base
# schema bill_id(INT), sponsor_id(INT), kind(STRING)
belongs_to :bill
belongs_to :sponsor, class_name: "CongressPerson"
end
class CongressPerson < ActiveRecord::Base
has_many :sponsorships, -> { where(kind: :primary) }, class_name: "Sponsorship", foreign_key: :sponsor_id
has_many :cosponsorships, -> { where(kind: :secondary) }, class_name: "Sponsorship", foreign_key: :sponsor_id
has_many :sponsored_bills, through: :sponsorships, source: :bill
has_many :cosponsored_bills, through: :cosponsorships, source: :bill
end
ここSponsorship
テーブルのための基本的な移行です:
class CreateSponsorships < ActiveRecord::Migration
def change
create_table :sponsorships do |t|
t.references :bill
t.references :sponsor
t.string :kind
t.timestamps
end
end
end
これは、あなたが以下のような呼び出しを行うことができるようになります:
@bill.sponsors
# => returns the congress_people sponsoring the bill
@bill.cosponsors
# => returns the congress_people cosponsoring the bill
@congress_person.sponsored_bills
# => returns the bills sponsored by the congress person
@congress_person.cosponsored_bills
# => returns the bills cosponsored by the congress person
あなたのCongressPerson
表示ビュー:
<%= @congress_person.sponsored_bills.each do |sponsored| %>
# populate your HTML table row
<% end %>
<%= @congress_person.cosponsored_bills.each do |cosponsored| %>
# populate your HTML table row
<% end %>
スポンサーシップテーブルの場合、bill_id&sponsor_idにadd_referenceを使用しますか? – Taylor
@Taylor「Sponsorship」テーブルの移行例を追加しました。私はまたこれをもっと明確にするために活発なレコード関係を微調整しました。それが役に立てば幸い! – user3680688
私は何かを微調整してフォームを表示することができましたが、名前がドロップダウン表示される代わりに、#というテキストボックスが表示されます。何か案は? –
Taylor