我一直在研究这个问题,但我仍然不清楚如何执行我的预期行动。我觉得我可能使用了不正确的术语,所以我希望有人可以指出我正确的方向。
我的应用程序包含documents
和templates
,每个应用程序都是独立的模型。我有我的模型:
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以外的那些似乎无法满足我需求的阅读。
答案 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
。