Web サイトに不適切な表現のチェックを追加したいと考えています。
私はTDアプローチを採用しており、次のことを試みています。
- 特定のプロフィール フィールドに冒とく的な表現が存在するかどうかを確認する
- フラグを作成する
- フラグが存在しない場合は作成する
- 存在するが却下された場合はフラグを作成する
これまでの私の仕様は次のとおりです。
describe Painter do
before do
@painter = FactoryGirl.create(:painter_flag)
end
context "blacklist flag" do
it "check if profanity exists" do
@painter.experience = "test"
@painter.save
expect {@painter.blacklist_flags?}.to be_true
end
it "create flag if profanity exists" do
@painter.experience = "test"
@painter.save
BlacklistFlag.count.should be > 0
end
end
end
ペインター関連のコード:
after_save :create_flag, if: :blacklist_flags?
def blacklist_flags?
list = ""
list << skills
#list << experience
#list << first_name
#list << last_name
#list.downcase.scan(/(badword|badword)/).size > 0
end
def create_flag
end
2 つのテスト パスの上にある次のコードをコメント アウトすると、次のようになります。
list << skills
コードをそのままにしておくと、次のエラーが表示されます。
2) 冒涜が存在する場合、ペインター ブラックリスト フラグ作成フラグ 失敗/エラー: @painter = FactoryGirl.create(:painter_flag) TypeError: nil を文字列に変換できません
スキルや経験などがモデルの一部であるため、自己参照に問題があるようです。これを修正する方法がわかりません。お知らせ下さい。
アップデート:
FactoryGirl.define do
factory :painter do
first_name "Brian"
last_name "Rosedale"
state "OH"
zip_code "43081"
sequence(:email) {|n| "nobody#{n}@painterprofessions.com" }
phone "12345566"
pdca_member false
password "123456"
factory :painter_flag do
skills = "badword"
end
end
end