Last active
July 30, 2018 14:56
-
-
Save ta1kt0me/c8532fdb165a9528f421f141bec2b3bf to your computer and use it in GitHub Desktop.
`on`で指定したcontextの時にだけ、html5 validationを有効にしたいケースのサンプルコード
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| require "bundler/inline" | |
| gemfile do | |
| source "https://rubygems.org" | |
| git_source(:github) {|repo_name| "https://github.com/#{repo_name}" } | |
| gem "rails" | |
| gem "html5_validators" | |
| gem "sqlite3" | |
| end | |
| require "action_controller/railtie" | |
| class TaskApp < Rails::Application | |
| Rails.logger = Logger.new $stdout | |
| secrets.secret_key_base = "secret_key_base" | |
| config.eager_load = false | |
| initialize! | |
| routes.draw do | |
| resources :tasks, only: [:new, :create, :edit, :update] | |
| end | |
| end | |
| require "active_record" | |
| ActiveRecord::Base.establish_connection adapter: "sqlite3", database: ":memory:" | |
| ActiveRecord::Schema.define do | |
| create_table :tasks, force: true do |t| | |
| t.string :name | |
| t.text :memo | |
| end | |
| end | |
| class Task < ActiveRecord::Base | |
| validates :name, presence: true | |
| validates :memo, presence: true, on: :update | |
| end | |
| class TasksController < ActionController::Base | |
| TEMPLATE =<<~ERB | |
| <%= form_for @task do |f| %> | |
| <%= f.text_field :name %> | |
| <%= f.text_area :memo %> | |
| <% end %> | |
| ERB | |
| def new | |
| @task = Task.new | |
| render inline: TEMPLATE | |
| end | |
| def edit | |
| @task = Task.find(params[:id]) | |
| render inline: TEMPLATE | |
| end | |
| end | |
| require "minitest/autorun" | |
| require "rack/test" | |
| class TasksTest < Minitest::Test | |
| include Rack::Test::Methods | |
| def test_only_add_required_attribute_on_create | |
| get "/tasks/new" | |
| assert_match %r{<input required="required" type="text" name="task\[name\]" id="task_name" />}, last_response.body | |
| # 現在は `<textarea required="required" name="task[memo]" ...` と、updateのcontextだけで有効にしたいケース以外でもhtml5 validationsが有効になる | |
| assert_match %r{<textarea name="task\[memo\]" id="task_memo">\n</textarea>}, last_response.body | |
| end | |
| def test_only_add_required_attribute_on_update | |
| Task.create name: "foo" | |
| get "/tasks/1/edit" | |
| assert_match %r{<input required="required" type="text" value="foo" name="task\[name\]" id="task_name" />}, last_response.body | |
| assert_match %r{<textarea required="required" name="task\[memo\]" id="task_memo">\n</textarea>}, last_response.body | |
| end | |
| private | |
| def app | |
| TaskApp | |
| end | |
| end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment