繁体   English   中英

在多模型视图导轨中使用Has_and_belongs_to_many关联

[英]Using Has_and_belongs_to_many association in multi model view rails

我是新手,对视图有麻烦,所以请问这是一个简单的问题。 我想知道如何添加到视图中的has_and_belongs_to_many关联。

在这种情况下,我有一个模型,该模型包含以下蒙古文件:

class Project
  include Mongoid::Document
  field :name, type: String
  key :name
  field :numPeople, type: Integer
  has_and_belongs_to_many :people
end

和...

class Person
  include Mongoid::Document
  field :name, type: String
  key :name
  field :numProjects, type: Integer, default: 0
  has_and_belongs_to_many :projects
end

我想要的是一个Person页,它能够在文本字段中写一个项目的名称,如果该项目存在,它将把他添加到该项目中;如果不存在,它将创建一个名称为他的新项目。指定。

我想要的与此类似(在HAML中):

= form_for Project.new do |f|
    %p
        = f.text_field :name
        = f.submit "Add Project"

但我不想每次都创建一个新项目,因为该项目可能已经存在。

我在formtastic和nested_form上查找内容,但没有找到与我的情况相符的完美示例。

谢谢

我是菜鸟,但我想我可以提供帮助-不是针对视图,而是针对下面的逻辑。

看来您将需要在PersonPagesController中执行一个操作,该操作将在表单提交时被调用(承认您的表单发送了一个person_name和一个project_name),该操作应类似于:

def add_person_to_project
  @person = Person.find(params[:person_name])
  @project = Project.find_or_create_by_name(params[:project_name])
  @project.persons << @person # or @person.projects << @project
end

可以在http://api.rubyonrails.org/classes/ActiveRecord/Base.html (在“基于动态属性的查找器”下)找到有关find_or_create的信息。

您显然必须发送此人的姓名和表格才能使用,这可以通过在为特定人生成空表格时添加一个预填充的隐藏字段来实现(我不知道formstatic和nested_form虽然...)。 您可能还需要对此加以保护(在添加人员之前,请检查是否确实找到了该人员,以及该人员是否还不属于该项目...)

另外,我通常不建议使用名称字段作为您的人员和项目的键,但这取决于您。 不过,我建议您以另一种方式实现此方法,让用户在列表中选择项目或创建一个新项目(例如,如果您的用户输入错字会发生什么情况?)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM