モデルのバリデーションの正規表現の書き方で怒られる
モデルのバリデーションで以下の様な正規表現を使って書いたら
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/}
注意しましょう。
関連記事
Rails4 ビギナーズガイド: MVCアーキテクチャをマスターせよ! PRIMERシリーズ (libroブックス)
- 作者: 掌田津耶乃
- 出版社/メーカー: Tuyano-Project
- 発売日: 2016/02/21
- メディア: Kindle版
- この商品を含むブログを見る
簡単にhtmlやerbのソースをslimに変換(コンバート)する方法
ここ最近、erbを使うのをやめてslimに移行してきているのですが、 既存のerbに手を入れる時に、まずslimになおしてそれから、改修コードを入れるみたいな作業が発生していました。
もっと早く調べればよかったんですが、すでにhtmlやerbからslimに変更するツールがが存在するんですね。 その紹介です。
テキストベースの場合
まずテキストベースの場合です。
サイト上の誰からのコードをslimに変更した時に便利なのがこちらです。
HTML部分にソースを書いて(貼り付けて) [COMVERT]ボタンをクリックすると 右側に変換したコードを表示してくれます。
最高に楽ちんです。
既存ソースの場合
次にすでに、erbファイルがあるけど、一括でslimに変更したい時パターンです。
まずこちらの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
まとめ
感謝感謝。かなり便利です。
関連記事
改訂3版基礎 Ruby on Rails (KS IMPRESS KISO SERIES)
- 作者: 黒田努,佐藤和人,株式会社オイアクス
- 出版社/メーカー: インプレス
- 発売日: 2015/05/22
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (2件) を見る
rake db:seedでDeviceのユーザーを追加する
初期ユーザーを登録時に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
参考サイト
関連記事
Head First Rails ―頭とからだで覚えるRailsの基本
- 作者: David Griffiths,松田明,児島修
- 出版社/メーカー: オライリージャパン
- 発売日: 2010/01/18
- メディア: 大型本
- 購入: 11人 クリック: 273回
- この商品を含むブログ (31件) を見る
Bootstrap モダルダイアログを簡単にクローズできないようにしながら表示する
Bootstrapのモーダルダイアログを使った時に、下記のダイアログが閉じてしまアクションを防ぎます。
(ダイアログが閉じないようにします。)
- ダイアログの外側をクリックしてダイアログを閉じるアクション
- [ESC]ボタンをクリックしてダイアログを閉じるアクション
使用用途
使用用途があるのか疑問視されそうですが、超必須項目で強制的にダイアログを表示し、 何かを絶対に入力させたい時などを想定しています。
ソースコード
今回は仮に、shopというモデルを更新するような物を想定しており、 [閉じる]ボタン等も配置していません。
こんな感じのモーダルダイアログになります。
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]ボタンクリックでダイアログが閉じないようしています。
関連記事
- 作者: Jake Spurlock
- 出版社/メーカー: Oreilly & Associates Inc
- 発売日: 2013/05/22
- メディア: ペーパーバック
- クリック: 1回
- この商品を含むブログ (1件) を見る
Railsのアプリケーション固有の環境変数を持たせる方法
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
比較的にシンプルにアクセスもできると思います。
関連記事
- 作者: すがわらまさのり,前島真一,近藤宇智朗,橋立友宏
- 出版社/メーカー: 技術評論社
- 発売日: 2014/06/06
- メディア: 大型本
- この商品を含むブログ (8件) を見る
日本で使うRailsアプリケーションのタイムゾーンの設定
日本で使うRailsのアプリの場合、 タイムゾーン設定は以下の様に設定しました。
表示もDBもJSTを設定しています。
application.rb
config.time_zone = 'Tokyo' config.active_record.default_timezone = :local
config.time_zone
表示に使われるタイムゾーン
config.active_record.default_timezone
DBに保存する時に使われるタイムゾーン
関連記事
Slimで動的なクラス属性の書き方
Slimってコード量は減るんですが、時々これどうやって書くんだっけ?ってなります。
今回は、動的なクラス属性の設定方法です。
今回はヘルパーメソッドの値をクラスに設定するパターンを想定します。
aaaa.html.slim
li [class="#{is_active()}"]
aaaa_helper.rb
def is_active() result = '' if current_user.present result = 'active' end result end
上記なような感じになります。
以下で囲みましょう!!
#{}