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

时间:2016-01-11 00:02:31

标签: ruby-on-rails associations model-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关联似乎工作正常。

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

我知道我在这里走了一段时间,但希望有人可以提供一个有用的答案和/或其他一些SO帖子,或者超出标准Rails Association Basics以外的那些似乎无法满足我需求的阅读。

1 个答案:

答案 0 :(得分:0)

您应该在控制器中获取一组模板名称及其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