如何将一个模型传递给另一个模型 Rails

How to pass one model to another Rails Associations

我已经对此进行了一段时间的研究,但我仍然不清楚如何执行我的预期操作。我觉得我可能使用了不正确的术语,所以我希望有人能给我指出正确的方向。

我有一个包含 documentstemplates 的应用程序,每个都有各自的模型。我有我的模型,因此:

class Document < ActiveRecord::Base
    belongs_to :user
    has_one :template
end

class Template < ActiveRecord::Base
 has_one :document
end

最后,

class User < ActiveRecord::Base
      has_many :templates
      has_many :documents, :through => :templates
end

我的 user/documents 协会似乎运作良好。

我想设置一个工作流,用户可以在其中上传多个模板,然后 select 在 /documents/new 的表单上 template 创建自定义的 document 基于该模板。我将 template_id 作为我的文档模型中的一个字段,并打算在 documents 控制器中的新操作上按 @document.template_id = template.id 的顺序使用一些语法。当我尝试在我的 documents 模型的新视图中使用 f.select 时,我遇到了第一个障碍,因为我无法找到一种方法来从列表中动态地 select 当前用户的可用模板。

我知道我在这里讲了很久,但希望有人能提供有用的答案 and/or 其他一些 SO 帖子或超出标准的进一步阅读 Rails Association Basics 似乎没有解决我的问题需要。

您应该在控制器中获得一组模板名称及其 ID。

例如:

Rails 4岁以上

@available_templates = @user.templates.pluck(:id, :name)

Rails 3

@available_templates = @user.templates.map{|tmplt| [tmplt.name, tmplt.id]}

然后在 document/new 表单中执行以下操作

=f.select :template_id, @available_templates,
 {prompt: 'Select a template'}, {required: true}

你的 document 模型应该是 belongs_to :template 而不是 has_many 因为你的文档实例中有 template_id