使用我的第一个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更好。 ..
有关研究内容或解决方案的任何想法吗?我觉得我错过了一些非常基本的东西!
答案 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的建议,他们让我走上了正确的道路! :)