Rails拼图:检查是否存在嵌套值,如果它不保存但保存子值

时间:2012-11-03 17:21:47

标签: ruby-on-rails forms model nested-forms nested-attributes

我有一个挑战,我一直在努力解决过去几个小时。

我有一个带有嵌套属性的表单。每个帖子都有并且属于许多地点。我需要每个位置都是唯一的,但我还需要能够在许多帖子中添加相同的位置。理想情况下,此验证将在模型中完成。

  • 因此,在我的帖子中,目前正在发生的是用户'添加一个 location',然后他们在foursquare API中搜索一个位置。
  • 提交后,会将其保存到位置表中,并附上位置名称和 经度和纬度,有一个Locations_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

(从rails: create Parent, if doesn't exist, whilte creating child record被盗)

但是,我收到的错误如下:

Unknown key: 0

我想我必须接近这个片段,但需要一些帮助才能克服最后一道障碍!

提前致谢,

詹姆斯

2 个答案:

答案 0 :(得分:1)

尝试使用:

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

答案 1 :(得分:0)

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

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

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