2个表之间的多个引用,一对多以及多对多

时间:2019-05-27 13:25:56

标签: ruby-on-rails ruby-on-rails-5

我刚刚开始学习RoR,并决定创建一个附带项目以了解更多信息。我已经在这个问题上停留了大约一个星期了:(

基本上,我正在尝试在两个表(用户和食谱)之间建立关系。

为了我的应用程序,需要形成2种关系。

  1. 食谱是由用户创建的,因此是一对多的关联。
  2. 一个用户可以拥有自己喜欢的食谱,而一个食谱可以被多个用户所喜爱。因此,这是一个多对多的关联。

这是我到目前为止所做的。

用户模型

  has_many :recipes
  has_many :user_recipes
  has_many :recipe, through: :user_recipes

食谱模型

  belongs_to :user, dependent: :destroy
  has_many :user_recipes
  has_many :users, through: :user_recipes

user_recipes模型

  belongs_to :user
  belongs_to :recipe

user_recipe迁移文件

  t.belongs_to :recipe, index: true
  t.belongs_to :user, index: true

食谱迁移文件

  t.belongs_to :user

用户迁移文件与配方没有任何关系。

从我的所作所为。我本来可以: 1.向用户分配食谱(创建者),然后使用recipe.user进行检查 2.使用recipe.users << user

分配喜欢的关系

问题 当我键入user.recipes时,它会告诉我用户创建了哪些食谱,而不喜欢用户喜欢哪些食谱。我认为应该有一种更好的方法来设置我的同事以能够正确使用所有功能。

感谢所有帮助。预先谢谢你!

1 个答案:

答案 0 :(得分:0)

为创建的食谱提供别名,这样您就不必使用“ user.recipes”来访问它。

以这种方式编辑用户模型:

替换行

has_many :recipes

具有这样的内容:

has_many :created_recipes, foreign_key: :user_id, class_name: "Recipe"

这样做,您可以通过键入“ user.created_recipes”访问用户创建的食谱,并通过键入“ user.recipes”来访问用户喜欢的食谱。