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

时间:2016-07-23 18:49:50

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

使用我的第一个rails应用程序,我被卡住了。我自己也很努力地解决这个问题,但我似乎无法解决这个问题。我在制作属于属于用户的对象的对象时遇到问题。

这些是模型关联结构:

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

我想我需要以某种方式参考我尝试构建的文档所属的项目,但我被卡住了。如果我向doc表单中添加一个hidden_​​field_tag以传入project_id,那么在docs控制器中使用一个param将@project分配给该project_id,这是有效的,但我知道这比发送一个hidden_​​field_tag更好。 ..

有关研究内容或解决方案的任何想法吗?我觉得我错过了一些非常基本的东西!

2 个答案:

答案 0 :(得分:0)

在您用于创建工作表的表单中(如果该页面可以访问@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

并以表格形式创建表格

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

在图纸控制器的创建动作中

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

答案 1 :(得分:0)

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

我在user表中创建了一个新列,用于在active_project中存储一个整数来引用项目的id。在创建doc时,我首先将@project设置为id为current_user.active_project的项目,然后创建属于@project的doc。

这可能有点倒退,但它可以工作,我可以使用active_project数据来允许用户重新访问他们上次项目的开放登录。感谢@pavan的建议,他们让我走上了正确的道路! :)