Rails 5:创建具有 belongs_to 关联的对象 belongs_to 用户

Rails 5: Creating an object with a belongs_to association that belongs_to user

在开发我的第一个 rails 应用程序时,我遇到了困难。我已经非常努力地自己解决这个问题,但我似乎无法弄清楚。我在制作 belongs_to 对象 belongs_to 用户的对象时遇到问题。

这些是模型关联结构:

class User < ApplicationRecord
  has_many :projects, dependent: :destroy

class Project < ApplicationRecord
  belongs_to :user
  has_many :docs, dependent: :destroy

class Doc < ApplicationRecord
  belongs_to :project

我想我需要以某种方式引用我正在尝试构建的文档所属的项目,但我被卡住了。如果我在文档表单中添加一个 hidden_field_tag 以传入 project_id,然后在文档控制器中使用一个参数将 @project 分配给那个 project_id,这是有效的,但我知道有比发送 hidden_field_tag...

更好的方法

关于研究内容或解决方案的任何想法?我觉得我缺少一些非常基本的东西!

在您用来创建 sheet 的表单中(如果该页面可以访问 @project ,可能是 show.html.erb 个项目)

form_for([@project, @project.sheets.build]) do |f|
#rest of the code
end

如果表单没有访问@project 那么 在 Sheets 控制器的新操作中

@project = Project.find(params[:project_id]) #using data from params hash
@sheet = @project.sheets.build

并在表单中创建 sheet

form_for([@project, @sheet]) do |f|
end

在 sheet 控制器的创建操作中

 @project = Project.find(params[:project_id])
 #rest of the code what you have

虽然可能有更标准的用例类型的答案,但以下对我有用。

我在用户 table 中创建了一个新列,用于在 active_project 中存储一个整数以引用项目的 ID。在制作文档时,我首先将@project 设置为id 为current_user.active_project 的项目,然后将文档创建为属于@project。

这可能有点落后,但它有效,我可以使用 active_project 数据让用户重新访问他们上次打开的项目登录。感谢@pavan 的建议,他们让我走上了正确的道路! :)