如果没有相应的记录(多对多关系),如何验证失败

时间:2013-04-22 17:16:33

标签: ruby-on-rails ruby-on-rails-3

我有两个模型LinkFeed有许多关系(有很多:通过LinkFeed联接模型)。 每个链接应属于一个或多个Feed。所以我想允许创建链接(因为有相应的Feed记录):

@feed = Feed.create(name: "Test Feed")
@feed.links.create!(url: "http://google.com")

无法使用简单Link.create!(url: "http://google.com")创建链接,因为它没有相应的Feed记录。我怎么能这样做?

编辑: 我添加了这个验证:

validate do
  errors.add(:base, "Must have at least one feed") unless feeds.size > 0
end

但是现在这两个例子都失败了这个错误:/

2 个答案:

答案 0 :(得分:0)

尝试在外键must not be null中添加feed_id条件。

class Link

  validates :feed_id, :presence => true
  ...
end

这样可以保持在没有与Feed关联的情况下创建的记录失败。

编辑:

这里有两个关于多对多关系验证的答案 Validate uniqueness of many to many association in Rails
Correct implementation of many-to-many in Ruby on Rails?

答案 1 :(得分:0)

您的Link类需要validates_presence_of:feed_id和validates_associated的组合。 validates_associated确保Feed也是有效对象。