我的数据库中有四个Movie
表Showing
,Ticket
和Purchase
。电影有很多Showing
s,aShowing
有很多Ticket
s,aPurchase
有很多Ticket
s。
我想限制它,以使Ticket
s 中的所有 sPurchase
都只能用于 one Movie
。我是 Rails 的新手,想知道在模型中是否有办法做到这一点。(validate
或类似的东西)
我的数据库中有四个Movie
表Showing
,Ticket
和Purchase
。电影有很多Showing
s,aShowing
有很多Ticket
s,aPurchase
有很多Ticket
s。
我想限制它,以使Ticket
s 中的所有 sPurchase
都只能用于 one Movie
。我是 Rails 的新手,想知道在模型中是否有办法做到这一点。(validate
或类似的东西)
class Purchase
validate :validate_same_movie
private
def validate_same_movie
movie_ids = tickets.map do |ticket|
ticket.showing.movie.id
end.uniq
errors[:base] << "Can't have more than one movie in a purchase." if movie_ids.length > 1
end
end
沿着这些思路。
但我也敦促您仔细思考为什么要将这种额外的复杂性引入您的系统。以我的经验,我通常一次购买同一部电影的电影票,我不记得我何时一次购买了不同电影的票。但仅仅因为我没有这样做并不意味着没有人这样做。您正在增加复杂性,并且正在减少网站的功能。我并不是说你没有正当理由,因为我不知道你的应用程序是什么......只是一个建议,如果你真的需要这个,你可能会考虑。
这样的事情呢?
class Purchase < ActiveRecord::Base
has_one :movie
has_many :tickets
end
class Ticket < ActiveRecord::Base
has_one :purchase
end
class Movie < ActiveRecord::Base
has_many :purchases
end