简体   繁体   中英

Can I use validations on a Frozen_Record model in Ruby on Rails?

I'm using the gem Frozen Record in order to setup a series of invariable questions in my Rails app, which will be accessed and used by other models. Given I'm used to Test Driven Development, I'd already set up a series of tests and validations before adding the Frozen Record gem:

class Question < FrozenRecord::Base
 validates :next_question_id_yes, :question_text, :answer_type, presence: true
end

And the tests:

require 'rails_helper'

RSpec.describe Question, :type => :model do
 let(:question) {Question.new(id: "1", question_text: "who's the daddy?", answer_type: 'Boolean', next_question_id_yes: '7', next_question_id_no: "9")}

 it 'is valid' do
    expect(question).to be_valid
 end

 #questions can be valid without a next_question_id_no, because some questions just capture info
 #questions must have a next_question_id_yes as that will route them to the subsequent question
 #if it's the last question in a block, we will use the next number up to signify the questions are complete
 it 'is invalid without a next_question_id_yes' do
    question.next_question_id_yes = nil
    expect(question).to_not be_valid
 end

  it 'is invalid without a question_text' do
    question.question_text = nil
    expect(question).to_not be_valid
 end

  it 'is invalid without an answer_type' do
    question.answer_type = nil
    expect(question).to_not be_valid
 end

end

All of these passed when I had the class Question < ActiveRecord::Base but since becoming a FrozenRecord I get:

rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/frozen_record-0.4.0/lib/frozen_record/base.rb:78:in `method_missing': undefined method `validates' for Question:Class (NoMethodError)

I presume there's no method in Frozen Record to validate the presence of these columns. What I'm less sure of is:

  1. Do I need to perform validations on static data loaded via YAML? My first feeling was that this would be an additional check on my YAML code.
  2. If I do, can I write custom validations to check this data?
  3. Has anyone else used this gem and overcome the issue using Rspec? (it's been downloaded thousands of times according to RubyGems)

Any help would be appreciated.

Sorry to waste everyone's time - I just looked through the source code of FrozenRecord and worked out I can do it like this:

class Question < FrozenRecord::Base
  include ActiveModel::Validations
  validates :next_question_id_yes, :question_text, :answer_type, presence: true
  self.base_path = '/config/initializers/questions.yml'
end

Should think before I ask next time.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM