簡體   English   中英

Ruby on Rails has_many關系。

[英]A Ruby on Rails has_many relationship.

我是RoR的新手,正在從事我的第一個項目。 這個想法的基本概念是將選擇了一套“技能”的“用戶”與提交了專門針對那些選擇的技能的“幫助請求”的其他用戶聯系起來。 一個將熟練用戶與需要幫助的用戶聯系起來的應用程序。 我的問題與用戶,技能和Help_Request模型之間的關系有關。 感覺像是“ has_many:通過關聯”或“多態關聯”可能是為了這種三向關系? 真的不確定嗎?

任何想法或建議,將不勝感激。

多態關聯是一個模型應屬於另一個模型的時間。 假設您有一個評論模型。 您可以評論帖子和評論本身。 那時您將使用多態。

在您的情況下,只需執行一次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

有關更多信息,請參閱文檔

一種has_and_belongs_to_many是在用戶與幫助請求和技能之間創建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搜索它

恐怕ShivamD的回答還不夠。 這將需要重復的Skills ,並通過關系查詢相關的User.help_requests ,而您需要一個交集。

不僅如此,創建HelpRequests Users已經具有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

編輯:這是對的schmea 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM