我有个问题,我的头开始疼了。我可以看到一个解决方案,但只是需要一只手越过线,或一个完全不同的解决方案。
我用的是rails 4,我有3种型号。
通过jquery将协作者添加到项目中,方法是搜索用户,然后将用户的ID添加到DOM中,这样嵌套的属性就可以做到这一点。
这一切都能工作,但关键是协作者有角色,每个协作者可能在同一个项目中有多个角色。例如,某个人可能同时被列为项目不同部分的摄影师和作者。
目前,正在为每一个新的人/角色添加一个新的合作者(如约翰被添加为一名摄影师,然后在后面的一节中,约翰被添加为一名作家)。
相反,我要做的是检查协作者是否已经存在,如果已经存在,则更新嵌套属性,而不是创建一个新属性。
这样做的一个选择是在用户查找之后使用Jquery,并执行第二个ajax调用,以检查具有项目ID和用户Id的协作者是否存在,如果存在,则将协作者ID添加到dom,以触发正常的嵌套属性行为。
然而,这感觉就像一个非常笨重的方法。如果第二个ajax调用失败了,会发生什么?这也意味着,由于在应用程序的许多部分中添加了协作者,所以必须多次添加jquery /隐藏的字段代码。不太干。
更有意义的是在项目模型或控制器中添加一个方法,检查协作者是否已经存在。
我要做的是循环遍历协作者的嵌套属性,如果已经存在,添加协作者的ID。
我假设我需要查询project_id和user_Id的协作者,如果匹配,那么为协作者添加id属性?
project.rb
def collaborators_attributes=(attrs)
self.attributes.each do |key,value|
#How do I check and update the id attribute
end
end这种方法可能是完全错误的方向,因此,对它的任何援助,或一种新的方法非常值得赞赏。
发布于 2015-05-25 07:01:01
您可以尝试find_or_initialize_by:
collaborator = Collaborator.find_or_initialize_by(project_id: project_id, user_id: user_id)
collaborator.update_attributes(Hash)发布于 2015-05-26 01:12:28
好吧,到目前为止我要做的是
project.rb
#Modify collaborators before save
def collaborators_attributes=(attrs)
attrs.each do |key,value|
#loop through collaborators and check if they already exist
if Collaborator.where("project_id = ? AND user_id = ?", @attributes["id"], value["user_id"] ).present?
#if they do exist, add the collaborator id to the attributes
attrs[key]["id"] = Collaborator.where("project_id = ? AND user_id = ?", @attributes["id"], value["user_id"] ).first.id
#I'm adding the project id here, but it may not be required
attrs[key]["project_id"] = @attributes["id"]
end
end
#update or create new - based on of a collaborator id passed in attrs
assign_nested_attributes_for_collection_association(:collaborators, attrs)
end这感觉很混乱,但似乎奏效了。我正在抓取嵌套的属性,并遍历每个协作者以检查它们是否存在。如果是这样的话,我就将协作者id添加到属性中。然后通过assign_nested_attributes_for_collection_association更新或创建新的
目前唯一的问题是,如果我删除一个合作者,它就会从整个项目中删除他们,而实际上应该把他们标记为摄影师、作家等。我可以用一个类似的循环来解决这个问题,以检查是否增加了任何角色,但这一切都开始让人觉得这是一种很难做的事情。我想我要回到画板上,考虑分解模型,这样一个合作者就可以加入用户和项目,而一个合作者可以有每一个角色,比如摄影师、作家等等。
User
Collaborator
Photographer
Writer
Ect
Projecthttps://stackoverflow.com/questions/30432551
复制相似问题