Ruby on rails 如何验证所属字段';s模型场
考虑以下两种模型Ruby on rails 如何验证所属字段';s模型场,ruby-on-rails,Ruby On Rails,考虑以下两种模型 class Book < ActiveRecord::Base has_many :book_reports enum genre: [:fiction, :nonfiction] end class BookReport < ActiveRecord::Base belongs_to :book end classbook
class Book < ActiveRecord::Base
has_many :book_reports
enum genre: [:fiction, :nonfiction]
end
class BookReport < ActiveRecord::Base
belongs_to :book
end
classbook
我想验证book_报告,以便它只保存那些具有以下类型的报告:小说。我可以添加一个before\u save钩子来检查图书协会的流派,但我想知道是否有更好的方法。您可以使用
before\u create
回调来代替,这样您可以在工作流中更快地捕捉流派,但在其他方面,您的想法是相当合理的:
使用回拨触发对流派的检查,如果它与您要查找的不匹配,则拒绝该记录并继续
您还可以使用:validates
回调来验证self.genre==“Fiction”
或任何您想要检查的内容,并在验证之前使用
更快地捕获它
我建议您阅读上的RubyGuides页面,了解更多关于工作流的信息,然后使用最佳判断来决定何时实际检查所需的流派值。您可以在创建回调之前使用
,这样您可以在工作流中更快地捕捉流派,但除此之外,你的想法相当合理:
使用回拨触发对流派的检查,如果它与您要查找的不匹配,则拒绝该记录并继续
您还可以使用:validates
回调来验证self.genre==“Fiction”
或任何您想要检查的内容,并在验证之前使用
更快地捕获它
我建议您阅读上的RubyGuides页面,了解更多关于工作流的信息,然后使用最佳判断来决定何时实际检查所需的流派值。您可以使用:
您可以使用:
首先,为什么要在非小说类书籍中添加报告?没有上下文,可能比回调更好的选择是,如果不应该将报告分配给书籍,就不要将其分配给书籍。我使用书籍和书籍报告只是作为一个快速示例来演示问题,但是我同意把报告分配给书是愚蠢的,如果是这样的话,你为什么要把报告添加到一本非小说类的书中呢?没有上下文,可能比回调更好的选择是,如果不应该将报告分配给书籍,就不要将其分配给书籍。我使用书籍和书籍报告只是作为一个简单的示例来演示这个问题,但我确实同意,如果是这样的话,将报告分配给书籍是愚蠢的
validate :belongs_to_fiction_book, on: [:create, :update]
def belongs_to_fiction_book
errors.add(:book, "is not a fiction book.") unless book.genre == "fiction"
end