Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何验证所属字段';s模型场_Ruby On Rails - Fatal编程技术网

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