Ruby on rails Rails谜题:检查嵌套值是否存在,如果不存在';t保存它,但保存子值

Ruby on rails Rails谜题:检查嵌套值是否存在,如果不存在';t保存它,但保存子值,ruby-on-rails,forms,model,nested-forms,nested-attributes,Ruby On Rails,Forms,Model,Nested Forms,Nested Attributes,在过去的几个小时里,我一直在努力应对一个挑战 我有一个嵌套属性的表单。每个职位都有并属于许多位置。我需要每个位置是唯一的,但我也需要能够添加到许多职位相同的位置。理想情况下,该验证将在模型内完成 因此,在我的帖子表单中,当前发生的是用户添加 然后,他们在foursquare API中搜索位置 提交后,该文件将保存到带有位置名称和 经度和纬度,有一个位置表 把这些放在一起 需要做的是posts模型应该检查 如果某个位置存在,如果存在,则不要向该位置添加任何内容, 只需将相关数据添加到Locati

在过去的几个小时里,我一直在努力应对一个挑战

我有一个嵌套属性的表单。每个职位都有并属于许多位置。我需要每个位置是唯一的,但我也需要能够添加到许多职位相同的位置。理想情况下,该验证将在模型内完成

  • 因此,在我的帖子表单中,当前发生的是用户添加 然后,他们在foursquare API中搜索位置
  • 提交后,该文件将保存到带有位置名称和 经度和纬度,有一个位置表 把这些放在一起
  • 需要做的是posts模型应该检查 如果某个位置存在,如果存在,则不要向该位置添加任何内容, 只需将相关数据添加到Locations_Posts表中即可
经过一些研究,我发现我需要这样的东西:

*Posts.rb*

# =================
# = Location validations = 
# = If location exists then just add to locations_posts, else create new location =

def locations_attributes
location && location.name
end

def locations_attributes=(value)
self.location = Location.find_by_name(value)
self.location ||= Location.new(:name => value)
end
(偷自)

但是,我遇到了如下错误:

Unknown key: 0
我想我一定很熟悉这个片段,但是需要一些帮助来克服最后的障碍

提前感谢,

詹姆斯

尝试使用:

def locations_attributes=(value)
  self.location = Location.find_or_create_by_name(value)
end
尝试使用:

def locations_attributes=(value)
  self.location = Location.find_or_create_by_name(value)
end

在rails 4中,这种方法非常有效。谢谢大家

def locations_attributes=(value)
  self.location = Location.find_or_create_by(value)
end

这将检查为位置传入的所有属性的唯一性。

在rails 4中,这非常有效。谢谢大家

def locations_attributes=(value)
  self.location = Location.find_or_create_by(value)
end

这将检查为位置传入的所有属性的唯一性。

Hi!这似乎要通过ok来创建元素,但是当名称值预先存在时,它似乎找不到名称值。它只是保存价值。有什么想法吗?嗨!这似乎要通过ok来创建元素,但是当名称值预先存在时,它似乎找不到名称值。它只是保存价值。有什么想法吗?