ECのウェブ担当者のメモ

ECサイトを運営管理している、WEB担当プログラマのメモ

スポンサーリンク

モデルのバリデーションの正規表現の書き方で怒られる

f:id:jun9632:20160311143312p:plain

モデルのバリデーションで以下の様な正規表現を使って書いたら

validates :published_status,
            presence: true,
            format: { with: /^[01]$/}

以下のようなメッセージで怒られました。

The provided regular expression is using multiline anchors (^ or $),
which may present a security risk.
Did you mean to use \A and \z,
or forgot to add the :multiline => true option?

どうやら、セキュリティのリスクがあるらしいです。 以下のように置換しないと行けないみたいです。

^ => \A
$ => \z

正解の書き方はこちら

validates :published_status,
            presence: true,
            format: { with: /\A[01]\z/}

注意しましょう。

関連記事

marketing-web.hatenablog.com

marketing-web.hatenablog.com

簡単にhtmlやerbのソースをslimに変換(コンバート)する方法

ここ最近、erbを使うのをやめてslimに移行してきているのですが、 既存のerbに手を入れる時に、まずslimになおしてそれから、改修コードを入れるみたいな作業が発生していました。

もっと早く調べればよかったんですが、すでにhtmlやerbからslimに変更するツールがが存在するんですね。 その紹介です。

テキストベースの場合

まずテキストベースの場合です。
サイト上の誰からのコードをslimに変更した時に便利なのがこちらです。

erb2slim.com

f:id:jun9632:20160311124024p:plain

HTML部分にソースを書いて(貼り付けて) [COMVERT]ボタンをクリックすると 右側に変換したコードを表示してくれます。

最高に楽ちんです。

既存ソースの場合

次にすでに、erbファイルがあるけど、一括でslimに変更したい時パターンです。

github.com

まずこちらのGem をインストールします。

$gem install html2slim

そうすると、コンバーターがコマンドから使える様になります。

erbからslimに変換

$erb2slim -h
Usage: erb2slim INPUT_FILENAME_OR_DIRECTORY [OUTPUT_FILENAME_OR_DIRECTORY] [options]
        --trace                      Show a full traceback on error
    -d, --delete                     Delete ERB files
    -h, --help                       Show this message
    -v, --version                    Print version

使い方としては、ファイル指定で変換する方法とフォルダごと一括で変換する方法があります。 使い方は以下の様になります。

ファイル指定の場合

erb2slim app/views/home/index.html.erb app/views/home/index.html.slim -d

ディレクトリ指定の場合

erb2slim app/views/home/ app/views/home/ -d

-dオプションで、元々のerbファイルを削除します。 元ファイルを残しておく場合は、-dオプションが不要です。

htmlからslim

html2slimコマンドを使います。

基本的には、erb2slimと同じです。

$ html2slim -h
Usage: html2slim INPUT_FILENAME_OR_DIRECTORY [OUTPUT_FILENAME_OR_DIRECTORY] [options]
        --trace                      Show a full traceback on error
    -d, --delete                     Delete HTML files
    -h, --help                       Show this message
    -v, --version                    Print version

まとめ

感謝感謝。かなり便利です。

関連記事

marketing-web.hatenablog.com

改訂3版基礎 Ruby on Rails (KS IMPRESS KISO SERIES)

改訂3版基礎 Ruby on Rails (KS IMPRESS KISO SERIES)

rake db:seedでDeviceのユーザーを追加する

f:id:jun9632:20160310103321p:plain

初期ユーザーを登録時にrake db:seedを使って登録する方法です。

実装方法

UserモデルがDeviceで管理されている状態を想定しています。

default_user = 'admin@example.com'
default_user_password = '1234567890'
user = User.where(email: default_user)
if user.blank?
  user = User.new
  user.email = default_user
  user.password = default_user_password
  user.password_confirmation = default_user_password
  user.save!
end

default_userとdefault_user_passwordを適宜変更してください。

あとは、以下のコマンドを実行すれば、Userデータが投入されます。

$ rake db:seed

参考サイト

http://railsdoc.com/rake

関連記事

marketing-web.hatenablog.com

marketing-web.hatenablog.com

marketing-web.hatenablog.com

Head First Rails ―頭とからだで覚えるRailsの基本

Head First Rails ―頭とからだで覚えるRailsの基本

Bootstrap モダルダイアログを簡単にクローズできないようにしながら表示する

f:id:jun9632:20160310092430p:plain

Bootstrapのモーダルダイアログを使った時に、下記のダイアログが閉じてしまアクションを防ぎます。
(ダイアログが閉じないようにします。)

  • ダイアログの外側をクリックしてダイアログを閉じるアクション
  • [ESC]ボタンをクリックしてダイアログを閉じるアクション

使用用途

使用用途があるのか疑問視されそうですが、超必須項目で強制的にダイアログを表示し、 何かを絶対に入力させたい時などを想定しています。

ソースコード

今回は仮に、shopというモデルを更新するような物を想定しており、 [閉じる]ボタン等も配置していません。

f:id:jun9632:20160310092143p:plain

こんな感じのモーダルダイアログになります。

modal_daialog.html.slim

javascript:
  $(document).ready(function(){
    $('#shop_create_modal.modal').modal({backdrop: 'static', keyboard: false, show: true});
  });

#shop_create_modal.modal.fade tabindex="-1" role="dialog"
  .modal-dialog
    .modal-content
      .modal-header
        h4.modal-title
          | ショップ設定
      = form_for @current_shop, url: shops_path do |f|
        .modal-body

          .form-group
            = f.label :code
            = f.text_field :code, class: 'form-control'
          .form-group
            = f.label :name
            = f.text_field :name, class: 'form-control'

        .modal-footer
          = f.submit "登録", class: 'btn btn-default'

ポイント

大事なところは以下です。

$('#shop_create_modal.modal').modal({backdrop: 'static', keyboard: false, show: true});

backdrop

backdrop: 'static' でダイアログの外側をクリックでダイアログが閉じないようにしています。

keyboard

keyboard: falseで[ESC]ボタンクリックでダイアログが閉じないようしています。

関連記事

marketing-web.hatenablog.com

Bootstrap

Bootstrap

Railsのアプリケーション固有の環境変数を持たせる方法

f:id:jun9632:20160309224108p:plain

Railsでアプリケーションを起動してしまったら特に変更がなく、 Rails.envの環境にもそれぞれの変数を対応できるようにするための方法です。

共通項目に関しては、1回だけ設定です。

ベストな方法かはわかりませんが、以下の様に設定しました。

設定方法

config/system_config.yml

COMMON: &COMMON
  site_name: サイト名
  is_hoge: true


development:
  <<: *COMMON
  foo: development

test:
  <<: *COMMON
  foo: test

production:
  <<: *COMMON
  foo: production

config/initializers/system_config.rb

# -*- encoding : utf-8 -*-

SYSTEM_CONFIG = YAML.load_file("#{Rails.root}/config/system_config.yml")[Rails.env]

参照方法

SYSTEM_CONFIG['site_name'] # サイト名
SYSTEM_CONFIG['foo'] # development | test | production

比較的にシンプルにアクセスもできると思います。

関連記事

marketing-web.hatenablog.com

パーフェクト Ruby on Rails

パーフェクト Ruby on Rails

日本で使うRailsアプリケーションのタイムゾーンの設定

f:id:jun9632:20160309220036p:plain

日本で使うRailsのアプリの場合、 タイムゾーン設定は以下の様に設定しました。

表示もDBもJSTを設定しています。

application.rb

config.time_zone = 'Tokyo'
config.active_record.default_timezone = :local

config.time_zone

表示に使われるタイムゾーン

config.active_record.default_timezone

DBに保存する時に使われるタイムゾーン

関連記事

marketing-web.hatenablog.com

Slimで動的なクラス属性の書き方

f:id:jun9632:20160309173534p:plain

slim-lang.com

Slimってコード量は減るんですが、時々これどうやって書くんだっけ?ってなります。

今回は、動的なクラス属性の設定方法です。

今回はヘルパーメソッドの値をクラスに設定するパターンを想定します。

aaaa.html.slim

li [class="#{is_active()}"]

aaaa_helper.rb

def is_active()
    result = ''
    if current_user.present
      result = 'active'
    end
    result
end

上記なような感じになります。

以下で囲みましょう!!

#{}