我正在尝试在我的Rails应用程序中为ActiveResource和ActiveRecord类之间的habtm关联实现自己的方法。
这是我的课程:
class Project < ActiveResource::Base
end
class Target < ActiveRecord::Base
has_and_belongs_to_many :projects
def project_ids
project_ids
end
def project_ids=(pids)
project_ids = pids
end
def projects
projects = []
pids = project_ids.split(",")
pids.each do |pid|
projects.push(Project.find(pid))
end
end
def projects=(projs)
pids = projs.collect(&:id)
project_ids = pids.join(",")
end
end
我还连接了表项project_targets,其中包含两列project_id和target_id。
这不会在创建时将关联值记录到连接表中。
我的问题:
我真的很感激任何帮助。
提前感谢您的帮助!
答案 0 :(得分:1)
我的建议是不打击框架并使用内置方法。如果你想实现自定义访问器,那么你应该切换到有很多通道,因为它会为你提供一个模型(连接表),你可以使用它来手动设置关联。
从这里开始:http://edgeguides.rubyonrails.org/association_basics.html#the-has-and-belongs-to-many-association
您不需要自定义访问器project_ids或项目,因为rails会神奇地完成工作。
您可以轻松完成如下任务:
some_target.projects << some_project
你甚至不必调用some_target.save,因为&lt;&lt; operator正在保存关联并将id写入连接表。
如果您有一个项目数组或一个活动记录关系(如where子句的结果),您可以以相同的方式传递它
some_target.projects << array_of_projects
要删除关联,可以使用
之类的对象调用destroysome_target.projects.destroy a_specific_project
这不会破坏a_specific_project,但会将其取消关联。