0

RoR は初めてで、最初のプロジェクトに取り組んでいます。アイデアの背後にある基本的な概念は、一連の「スキル」を選択した「ユーザー」と、選択したスキルに特化した「ヘルプリクエスト」を送信した他のユーザーを接続することです。熟練したユーザーと必要に応じて助けが必要なユーザーをつなぐアプリ。私の質問は、Users、Skills、および Help_Request モデル間の関係に関係しています。「has_many :through アソシエーション」または「ポリモーフィック アソシエーション」が、この種の 3 方向の関係に適しているように感じますか? 本当にわからない?

ご意見やご提案をいただければ幸いです。

4

3 に答える 3

1

ポリモーフィックな関連付けは、モデルが別のモデルに属する必要がある場合です。コメント モデルの場合を考えてみましょう。投稿とコメント自体にコメントできます。その場合は、ポリモーフィックを使用します。

あなたの場合、単純な has_many スルーで十分です。このように見えるはずです

class User < ActiveRecord::Base 
  has_many :skills 
  has_many :help_requests, through: :skills
end

class Skill < ActiveRecord::Base 
  belongs_to :user
  belongs_to :helpRequest
end

class HelpRequest < ActiveRecord::Base 
  has_many :skills 
  has_many :users, through :skills
end

詳細については、ドキュメント

于 2013-11-07T13:02:07.060 に答える
0

乾草の 1 つはhas_and_belongs_to_many、ユーザーとヘルプ リクエストおよびスキルとの間に関係を作成することです。したがって、次のようになります。

class User < ActiveRecord::Base
  has_and_belongs_to_many :skills
end

class Help_request < ActiveRecord::Base
  has_and_belongs_to_many :skills
end

class Skills < ActiveRecord::Base
      has_and_belongs_to_many :users
      has_and_belongs_to_many :help_requests
end

次に、テーブルを作成する必要があります

 rails g migration add_skills_users_table

 rails g migration add_help_requests_skills_table

エンドランではrake db:migrate

その後、次を使用して検索できますUser.first.skills

于 2013-11-07T13:01:02.633 に答える
0

残念ながら、ShivamD の回答では十分ではありません。これには duplicate が必要Skillsであり、関連する via 関係を照会しUser.help_requestsますが、代わりに交差点が必要です。

それだけでなく、Users作成HelpRequestsする人にはすでにhas_many関係があります。それは理にかなっている。

HABTMこれから提案する (ここを参照)のスキーマは含めませんが、モデルについては説明します。基本的にあなたが望むもの:

skill = Skill.create(name: "My Skill")
user.skills         << skill
help_request.skills << skill

user.matched_help_requests
#> [help_request]

これは次のように達成できます。

class User
  has_and_belongs_to_many :skills

  def matched_help_requests
    HelpRequest.joins(:skills).where("skills.id IN(?)", skills.pluck(:id))
  end
end

class HelpRequest
  has_and_belongs_to_many :skills
end

class Skill
  has_and_belongs_to_many :users
  has_and_belongs_to_many :help_requests
end

編集:ここにのシュメアがありHABTMます:

rails g migration add_skills_join_tables

移行内

def change
  create_table :skills_users, id: false do |t|
    t.references :skill
    t.references :user
  end

  create_table :help_requests_skills, id: false do |t|
    t.references :skill
    t.references :help_request
  end

  add_index :skills_users,        [:skill_id, :user_id]
  add_index :help_request_skills, [:skill_id, :help_request_id] 
end
于 2013-11-07T14:07:19.910 に答える