【发布时间】:2016-01-20 11:51:23
【问题描述】:
在长时间使用其他 techno 之后,我又回到了正轨,看来我有点生疏了。
我一直在尝试处理项目、客户和联系人,但结果让我有些困惑。
起初我的项目中只有一个“contact_id”,一切都找到了,但我发现我真的很想为一个项目拥有多个联系人。
这就是我一直在尝试的:
项目模型:
class Project < ActiveRecord::Base
belongs_to :owner, class_name: User, foreign_key: "owner_id"
belongs_to :worker, class_name: User, foreign_key: "worker_id"
# belongs_to :contact, class_name: Contact, foreign_key: "contact_id"
has_many :project_contacts
has_many :contacts, :through => :project_contacts
has_many :tasks
has_many :feedbacks
before_save :set_estimated_time
#pleinty of utilities
end
联系方式:
class Contact < ActiveRecord::Base
belongs_to :client, class_name: Client, foreign_key: "client_id"
has_manny :project_contacts
has_many :projects, :through => :project_contacts
end
ProjectContact 模型:
class ProjectContact < ActiveRecord::Base
belongs_to :project
belongs_to :contact
end
我认为没问题,但这是我使用 Rails 控制台时得到的结果:
2.2.3 :001 > 项目 = Project.find(31) 项目负载 (0.3ms) SELECT 'projects'.* FROM 'projects' WHERE 'projects'.'id' = 31 LIMIT 1 => # 2.2.3 :002 > project.contacts NameError: 未初始化的常量 Project::ProjectContact
编辑:
联系人迁移
class AddProjectContacts < ActiveRecord::Migration
def change
create_table :project_contacts do |pc|
pc.belongs_to :project, index: true
pc.belongs_to :contact, index: true
pc.timestamps null: false
end
end
end
非常感谢您对此的任何帮助
再见
【问题讨论】:
-
您是否运行了迁移? (我知道愚蠢的问题,但你永远不知道)。另外, projet.project_contacts 返回什么?此关联必须在您运行 project.contacts 之前起作用。同样对于这种关联,如果您不需要在 ProjectContact 模型中做一些特殊的事情,您应该使用 has_and_belongs_to_many:guides.rubyonrails.org/…
-
是的,我确实运行了迁移(我还手动插入了 1 行以记录)。 project.project_contacts 返回“未定义的方法”
-
我应该添加一个foreign_key,例如:add_foreign_key :projectcontacts, :projects, column: :project_id, on_delete: :nullify 用于项目和联系人吗?
-
不,我不认为你必须这样做......嗯......让我测试你的代码:)
-
谢谢你:-)。真的很难靠自己重回正轨=]
标签: ruby-on-rails ruby-on-rails-4 model-view-controller has-many-through