0

我的数据库中有四个MovieShowingTicketPurchase。电影有很多Showings,aShowing有很多Tickets,aPurchase有很多Tickets。

我想限制它,以使Tickets 中的所有 sPurchase都只能用于 one Movie。我是 Rails 的新手,想知道在模型中是否有办法做到这一点。(validate或类似的东西)

4

2 回答 2

1
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

沿着这些思路。

但我也敦促您仔细思考为什么要将这种额外的复杂性引入您的系统。以我的经验,我通常一次购买同一部电影的电影票,我不记得我何时一次购买了不同电影的票。但仅仅因为我没有这样做并不意味着没有人这样做。您正在增加复杂性,并且正在减少网站的功能。我并不是说你没有正当理由,因为我不知道你的应用程序是什么......只是一个建议,如果你真的需要这个,你可能会考虑。

于 2013-07-22T04:55:10.400 回答
0

这样的事情呢?

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
于 2013-07-22T02:09:32.843 回答