如何将一个模型传递给另一个模型 Rails
How to pass one model to another Rails Associations
我已经对此进行了一段时间的研究,但我仍然不清楚如何执行我的预期操作。我觉得我可能使用了不正确的术语,所以我希望有人能给我指出正确的方向。
我有一个包含 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
协会似乎运作良好。
我想设置一个工作流,用户可以在其中上传多个模板,然后 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
。
我已经对此进行了一段时间的研究,但我仍然不清楚如何执行我的预期操作。我觉得我可能使用了不正确的术语,所以我希望有人能给我指出正确的方向。
我有一个包含 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
协会似乎运作良好。
我想设置一个工作流,用户可以在其中上传多个模板,然后 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
。