2017-02-26 13 views
0

私はbillsというテーブルを持っています。 Bills has_manyスポンサーとhas_many共催者。スポンサーと共催者の両方に議員のリストが含まれています。私はcongress_peopleというテーブルも持っています。 congress_peopleのshowページには、議員のスポンサーに何を請求するのか、どのような議案を共催するのかを示す表が表示されます。どのように私はこれを行うことができるかについての任意のアイデア?私はテーブルを生成することを知っているが、私はどのように関連付けを設定するか分からない。私はレール4.2とmysql2を使用しています。おかげアソシエーション/ db参照の設定rails 4

答えて

0

あなたは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 %> 
+0

スポンサーシップテーブルの場合、bill_id&sponsor_idにadd_referenceを使用しますか? – Taylor

+0

@Taylor「Sponsorship」テーブルの移行例を追加しました。私はまたこれをもっと明確にするために活発なレコード関係を微調整しました。それが役に立てば幸い! – user3680688

+0

私は何かを微調整してフォームを表示することができましたが、名前がドロップダウン表示される代わりに、#というテキストボックスが表示されます。何か案は? – Taylor

関連する問題