0

我有一个User模型,它 has_many Dishthrough Recommendation。我想强制 的唯一性Dish,以及 的唯一性Recommendation

我应该怎么做ActiveRecord呢?

在我的dish.rb

validate_uniqueness_of :dish_name

我想要的是:当用户推荐一道菜时,如果它不存在,则创建一个新菜,然后创建推荐。如果菜已经存在,那么只需创建推荐并指向现有菜。

我是否需要手动处理这些情况(即检查dish控制器中是否存在),或者 ActiveRecord 有办法在内部处理它?

更新: validate_uniqueness_of :dish_name只检查并返回错误消息,如果dish在那里创建。它可能不会创建recommendation指向现有dish.

4

2 回答 2

2

你总.find_or_create_by_<attribute>能找到这道菜

于 2013-03-13T14:15:46.997 回答
1

如我所见,不止一个用户可以推荐同一道菜。

您的模型应如下所示:

Class User < ActiveRecord::Base
has_many :recommendations
has_many :dishes, :through => :recommendations
end

Class Dish < ActiveRecord::Base
has_many :recommendations
has_many :users, :through => :recommendations
end

因此,您在数据库中的 Recommendations 表应该有两列(除了它的 id 和时间戳),称为user_idand dish_id。要验证用户不会两次推荐同一道菜,请执行以下操作:

Class Recommendations < ActiveRecord::Base
belongs_to :dish
belongs_to :user
validates_uniqueness_of :dish_id, :scope => :user_id
end

而且我不知道.find_or_create_by丹推荐的方法,所以一定要尝试使用类似的方法。

希望我帮助:)

于 2013-03-13T14:17:44.320 回答