じぶんメモ

プログラミングのメモ、日常のメモとか。

2016-01-01から1年間の記事一覧

Railsにtwitter bootswatchを導入する

Railsにbootswatchを導入する際にはまったのでメモ。 導入方法 gem 'twitter-bootswatch-rails-helpers', '~> 3.2.0.0' gem 'twitter-bootswatch-rails', '~> 3.2.0' # bootswatch適用に必要 gem 'less-rails' gem 'execs' Gem fileに記入したらインストール…

Railsでデータベースへの登録あれこれ

データベース登録サンプル。 * saveメソッド:登録成功時にtrue、失敗時にfalseを返却する。 * save!メソッド:登録失敗時に例外を返却する。 普通に登録する分にはsaveメソッドで問題ないが、 他テーブルも兼ねたトランザクションでのロールバックをする場…

Railsでi18nを使用して他言語化に対応する

i18nを使用して他言語化する方法を調べた。 デフォルトロケールの設定 config/application.rb内に、以下の1行を追記。 config.i18n.default_locale = :ja 各ロケールの辞書の設定 config/locales/内に、各ロケールのyamlファイルを作成。 日本語ならば、conf…

hidden フィールドマニピュレーション

hidden フィールドマニピュレーションとは ファイルのダウンロード機能や、ECサイトなどで、 重要な情報をhiddenフィールドに保持させておいたために、 リクエスト送信時にhiddenフィールドの値を改ざんされ、 不正に情報を取得されること。 hidden項目だけ…

Rails4のマイグレーションの書き方

新規にテーブル作成する場合 class CreateUsers < ActiveRecord::Migration def change create_table :users do |t| t.column :email, :string, null: false t.index :email end end end カラムの追加や削除を行う場合 changeメソッドを使用する。 changeメ…

Railsのマイグレーションファイルをまとめる

Railsで、テーブル構成を変更するたびに作成するマイグレーションファイルが増加しまくるので、 何か良い方法はないか調査した。 二つみつけた。Squasherが手軽な感じがする。 Squasherを使ってまとめる方法 お手軽なやつ。ただしdry runは対応していない模…

jQueryを使用したAjax通信

Ajax通信でハマったのでメモ。 ちなみにrailsなら :remote => true にしておけばjsにajax処理書かなくても問題ない。 (その代わり.js.erbが必要か。) 他の言語でもやることを想定してメモしておく。 通信方法 ボタン押した時にAjaxでデータ取ってくるみたい…

Railsで独自のアクションをルーティングに加える

railsにはリソースベースのルーティングで、 index, new, create, show, edit, update, destroyが用意されている。 resources :posts 独自のアクションをルーティングに追加する方法 # これだとposts/:id(hogehoge)とみなされる get 'posts/hogehoge' => 'po…

クロスサイトスクリプティング対策

クロスサイトスクリプティングとは スクリプトタグ等、ユーザが入力した悪意のある値がhtmlに埋め込まれ、 スクリプトが実行されてしまう脆弱性のこと。 対策 formでユーザが入力した値をhtmlに出力する際は必ずエスケープ処理をかける。 POSTでパラメータと…

javascriptでの文字列エスケープ

XSS対策としてjavascriptでの文字列エスケープについて調べた。 PHPや他の言語のようにサニタイズメソッドが用意されていないようなので 独自に実装するのが良さそう。 考慮する必要があるのは、 < → &lt; > → &gt; " → &quot; ' → &#39; & → &amp; リプレー…

seedsを使ったテーブルへのデータINSERT

Railsでテーブル作成後、seedsファイルを使用したデータの登録手順を記載する。 1.seedsファイルにseed対象のファイルを追加 seedsファイルに直接テーブルの作成ロジックを記載しても問題ないが、 テーブルの数が多くなった時に管理が煩雑になるので、テーブ…

フォームでのエンターキー押下時の送信制御

フォームでエンターキー押下時の制御 フォームのinputにフォーカスが当たっている状態でエンターキーを押下すると、 フォームの内容が送信される。 エンターキー押下時で送信させたくない場合は以下のようにjavascriptで制御してやれば良い。 $(document).re…

相関サブクエリを使って、各キーごとの最大値を取得する

SQL

相関サブクエリとは SQLのサブクエリ内で、サブクエリ外部のテーブルを参照するサブクエリのこと。 以下の例では、相関サブクエリで、 companyテーブルのareaと同じ値を持つdeptテーブルのレコードを抽出している。 SELECT dept.person FROM dept WHERE dept…

railsにbootstrapを導入する

以下に、gemを使用したrailsへのbootstrapの導入方法を記載する。 1.Gemの導入 以下のGemをGemfileに記載する。 gem 'twitter-bootstrap-rails' # bootstrapはlessで記述されているのでless-railsが必要 gem 'less-rails' # 同様に、less-railsの導入にrubyr…

救急車のサイレンは通り過ぎた後に音が低くなるのはぜか?→ドップラー効果

表題の通り、救急車のサイレンの音が、通り過ぎる前と後で音程が変わるのはなぜか。 これにはちゃんとした理由がある。 理由 音の高低を決めるのは、音を伝える空気の振動の幅。 振動の幅が狭ければ(振動する回数が多ければ)高い音に、 幅が広ければ(振動す…

disabledになっている項目はPOSTされない

inputタグで、disabledがtrueになっている項目は、サーバーにPOSTされない。 なお、readonlyになっている項目はカーソルで選択状態にすることができ、POSTもされる。

AjaxにおけるCSRF対策

HTTPヘッダのX-requested-withの値をチェック? HTTPヘッダのX-requested-withの値が、Ajax通信を示す「xmlhttprequest」であることを確認する。 SameOriginPolicyより、Ajax通信では、不正な外部ドメインからのアクセスはできない。 SameOriginPolicyとは …

CSRF対策

CSRFとは クエスト強要(CSRF:Cross-site Request Forgery)。 本来拒否すべき、外部のWebページからのHTTPリクエスト(POSTやGET)によって、 Webサイトの何らかの機能が実行されるというもの。 ユーザが罠を踏んで、ECサイトで勝手に買い物をされるといっ…

knockoutを使ったDOM操作

knockout.jsを使えば、DOM操作を簡略に記述することができ、 コードの行数が減りそう。jQueryでガシガシDOM操作するよりスマートに記述できる。 knockoutでは、jsの変数と、htmlのセレクターをko.observable()という関数を使って関連づけることで、 自動的に…

curlでBasic認証がかかっているURLにアクセスする方法

Basic認証とは ユーザ名とパスワードの組みをコロン ":" でつなぎ、 Base64でエンコードして送信する認証方法。 curlでのBasic認証 以下の方法でアクセスする。 curl --user [ID]:[PASS] [URL]

curlで送信するリクエストメソッドを指定する方法

curlでリクエストメソッドを指定する場合、-X、--requestオプションを指定する。 ※オプションを指定しない場合、GETメソッドで送信される模様。 curl -X DELETE http://testdomain/id/10

curlでPOST送信

curlでPOST送信を行う方法。 オプションに-Dを付与する。 -Fでも可能だが、リクエストの受け取り側がmultipartをサポートしている必要がある。 curl -D param1=val1 -D param2=val2 http://testdomain/test.php 上記のコードはHTMLの以下の内容と同じになる…

javascriptで金額を千単位でカンマ区切りにする

javascriptで金額を扱う際に、千単位でカンマを付与させる。 ちなみにカンマ区切りは英語でthousand separator。 方法1. 正規表現 var amount = 100000; var formatedAmount = String(amount).replace( /(\d)(?=(\d\d\d)+(?!\d))/g, '$1,'); 方法2. toLocale…

jQueryにおけるpropとattireの違い

propとattrは、jQueryでフォームのチェックボックスやラジオボタン、 セレクトリストの選択しているの値を取得する時に使用する。 $(":checkbox").click(function() { alert($(this).prop('checked')); alert($(this).attr('checked')); }); propはtrueまた…

jQueryフォーム部品の値の取得・設定のまとめ

テキスト・テキストエリア val()を使用して取得・設定をする。 <input type="text" id="area" value="テキスト"> // 値の取得 $('#area').val(); // 値の設定 $('#area').val('テスト'); ラジオボタン <label><input type="radio" name="sex" value="0" checked>男</label> <label><input type="radio" name="sex" value="1">女</label> 選択したラジオボタンの値取得 var val = $('[name=se…

bxSliderを使用したレスポンシブカルーセル

レスポンシブなカルーセルを実装する時に、bxsliderを使用すると楽に実装できる。 jQuery Content Slider | Responsive jQuery Slider | bxSlider 使用するには上記リンクより必要なjs、cssをダウンロードし、 ソース内で読み込む。 以下にサンプルコードと…

jQueryを使用したセレクターのソート

jQueryを使用してセレクターのソートを行う際は、arrayクラスのsort()関数を使用する。 sort関数は、引数なしも実行可能だが、 ソート条件を指定できる。 sort()の戻り値(aとbをソートした場合) 1:bがaの手前に移動する 0:順序の変化なし -1:aがbの手前に移…