Ruby on rails 如何将一个模型传递给另一个模型

Ruby on rails 如何将一个模型传递给另一个模型,ruby-on-rails,associations,model-associations,Ruby On Rails,Associations,Model Associations,我已经研究了一段时间,但我仍然不清楚如何执行我的预期行动。我觉得我可能使用了不正确的术语,所以我希望有人能给我指出正确的方向 我有一个应用程序,它有文档和模板,每个文档和模板都有各自的模型。我有自己的模型,以便: class Document < ActiveRecord::Base belongs_to :user has_one :template end 及 最后 class User < ActiveRecord::Base has_many :

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

我有一个应用程序,它有文档和模板,每个文档和模板都有各自的模型。我有自己的模型,以便:

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

最后

class User < ActiveRecord::Base
      has_many :templates
      has_many :documents, :through => :templates
end
我的用户/文档协会似乎运作良好

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


我知道我在这里花了很长时间,但希望有人能提供一个有用的答案和/或其他一些SO帖子,或是超出标准的进一步阅读,这些似乎不能满足我的需要

您应该在控制器中获得模板名称及其id的数组

例如:

轨道4及以上

轨道3

然后在您的文档/新表单中执行以下操作

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

而且您的文档模型应该属于:template,而不是has-many,因为您的文档实例中有模板id。

您应该在控制器中获得模板名称及其id的数组

例如:

轨道4及以上

轨道3

然后在您的文档/新表单中执行以下操作

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

而且您的文档模型应该属于:template,而不是has多,因为您的文档实例中有模板id。

看起来我可以从documents/new调用current\u user.templates,但输出至少对我来说没有任何意义:您可以打印current\u user.templates的输出吗?首先,我似乎可以调用来自文档/新建的当前用户.templates,但输出至少对我来说没有任何意义:你能打印当前用户.templates的输出吗?首先?我将@template=template.all添加到我的索引视图中,并能够从同一用户创建的所有模板中获得输出,但是,当我将@available_templates=@user.templates.pull:id,:name rails 4添加到列表中时,我没有得到任何输出。你认为我应该使用current_user而不是designe syntaxignore吗?我将user.rb设置为has_many:templates,:through=>:documents,删除了:through=>文档,并能够在索引上获得正确的输出。仍然没有让Pull函数工作,但会研究它-谢谢你的见解Yes@user只是为了演示,因为我不知道你的变量名。它应该是当前用户.templates.pluck:id,:where,如果这回答了您的问题,请将其标记为正确答案!:你的回答对我很有效,谢谢。由于某种原因,我无法使用Rails4提供的语法,因为它似乎没有选择正确的模板。我恢复了rails 3的语法,即使使用rails 4I,它也可以正常工作。我将@template=template.all添加到我的索引视图中,并且能够从所有由同一用户创建的模板中获得输出,但是当我将@available_templates=@user.templates.pull:id,:name rails 4添加到列表中时,我没有得到任何输出。你认为我应该使用current_user而不是designe syntaxignore吗?我将user.rb设置为has_many:templates,:through=>:documents,删除了:through=>文档,并能够在索引上获得正确的输出。仍然没有让Pull函数工作,但会研究它-谢谢你的见解Yes@user只是为了演示,因为我不知道你的变量名。它应该是当前用户.templates.pluck:id,:where,如果这回答了您的问题,请将其标记为正确答案!:你的回答对我很有效,谢谢。由于某种原因,我无法使用Rails4提供的语法,因为它似乎没有选择正确的模板。我回到了Rails3语法,即使我使用的是Rails4,它也可以正常工作
@available_templates = @user.templates.map{|tmplt| [tmplt.name, tmplt.id]}
=f.select :template_id, @available_templates,
 {prompt: 'Select a template'}, {required: true}