Rails 5:多对多关系和控制器

时间:2018-10-29 17:04:19

标签: ruby-on-rails controller relational-database

根据先前的post,我了解如何设置表/模型,以便可以建立多对多关系

但是,我想做的是用1种形式在1页上实现所有这些功能。 (用户提交表单后,唯一会看到的页面是确认页面,可能只是显示其提交内容的详细信息)

用户仅需要能够更新任何可用餐点的数量。然后,我将在特定的日期/时间进行数据库备份,这将是一周中每个用户的命令。因此,我将表重组如下:

用户存储用户的信息。

user.rb

class User < ApplicationRecord
  has_many :mealselections
  has_many :meals, through: :mealselections
  accepts_nested_attributes_for :mealselections
end

膳食用于向所有用户显示膳食信息。 (餐名,描述,img_url)

meal.rb

class Meal < ApplicationRecord
  has_many :mealselections
  has_many :users, through: :mealselections
end

MealSelection 是引用用户选择的餐点的联接表,然后在此表中添加了一个附加的整数列,表示他们每次选择餐点所需的餐点数量

mealselection.rb

class MealSelection < ApplicationRecord
  belongs_to :user
  belongs_to :meals
end

所以我迷路的是如何利用控制器以单一形式执行CRUD功能。当我具有一对一关系时,这才更有意义,因为我只是为相关用户更新列(meal1,meat2,meat3),并且每顿饭#列均创建为默认值0。

但是现在,由于多对多关系的工作原理,我意识到用户至少必须从同一表单创建和更新列。

由于我将其显示在一页(主页)上,因此如何通过一种表单/请求在相应的HomeController中实现此目的?

1 个答案:

答案 0 :(得分:0)

尽管有些过时,http://railscasts.com/episodes/196-nested-model-form-revised中的内容演示了一种常见的技术,该技术涉及在用户选择使用javascript创建,删除或修改嵌套模型的字段时修改表单。该基本原理仍然很常用,因为它依赖于控制器和模型批量更新机制中的默认嵌套属性逻辑。对于强大的参数,您可能需要进行一些细微的调整,这是比内容生成时更常见的现代应用程序的一个因素。查看有关表单和控制器操作的代码也可能有助于获得更具体的答案。