開発
Userモデルのemailに、存在チェックとフォーマットチェックを入れることを考えます。 必要なgemをインストールしておきます。 # Gemfile gem 'validates_email_format_of' 普通にやってみる class User < ActiveRecord::Base validates :email, presence: tr…
CONCAT関数を使います。 例えばcolA, colBの2つのカラムでaaaを検索したい場合、 SELECT * FROM hoge_table where CONCAT(colA, colB) = "aaa" となります。 ただ、colA, colBのいずれかがNULLの場合、CONCATの結果もNULLになってしまうのでIFNULLで回避し…
作業環境 使用しているRailsは4.1.1です。 $ rails -v Rails 4.1.1 一番手っ取り早い方法 例えば、ユーザを指定のid順に取得したい場合は、 # 普通にid渡してもできない user_ids = [4,2,3,1] users = User.where(id: user_ids) #=> [1,2,3,4] # MysqlのORED…
CSS3のcalc()ファンクションが最新のブラウザで効かない。。困った。。。 .hogeBlock width: calc(100%-320px) // ←こいつ 原因は計算式の書き方でした。計算式の間にちゃんとスペースを入れないと機能しません。 In addition, whitespace is required on bo…
はじめに デザイナーに自分が伝えたいデザインや雰囲気をうまく伝えられないことがたびたびあり、「コミュニケーションをもっと円滑に!」ということでこの本を読んでみることにしました。 本全体としては、スマホアプリ/スマホサイトの両方が記述されていま…
User.all.group_by(&:age) レコードをグルーピングするときgroup_byを使いますが、引数の&(アンパサンド、アンド)の挙動をいまいち理解してなかったので調べてみました。 Rubyではメソッド呼び出しの引数に「&手続きオブジェクト」を渡すと、手続きオブジ…
SASSを導入してからコーディングがかなり楽ちんになったのですが、CSSでベンダープレフィックスをつけるとき、「このプロパティってプレフィックスいるんだっけ?」「Safariでこれってまだ必要だっけ?」みたいな問題によく遭遇します。 -webkit-border-radi…
railsサーバを起動しようとしたらmysqlまわりのエラーが出て起動できず。。 $ rails s /Library/Ruby/Gems/2.0.0/gems/mysql2-0.3.16/lib/mysql2.rb:8:in `require': dlopen(/Library/Ruby/Gems/2.0.0/gems/mysql2-0.3.16/lib/mysql2/mysql2.bundle, 9): Lib…
例えば以下の場合にSQLが1000回発行されます。 1000.times do Hoge.create(...) end # INSERT INTO hoge (...) # INSERT INTO hoge (...) # INSERT INTO hoge (...) # ... かなり非効率なのでbulk insertでSQLを1つにまとめて軽量化します。 Railsでbulk in…
環境 $ rails -v Rails 4.1.1 $ ruby -v ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-darwin14.0] $ echo $SHELL /bin/zsh タスクを作成 my_taskを作成してみます。 rails g task my_task # lib/task/my_task.rake namespace :my_task do desc "おれ…
newrelicのエラーレートが定期的にやたらと高くなるなーとおもってたらMG12botという迷惑ボットが周回してきてました。 404エラー頻発 →newrelicのアラートが止まらない →不安で寝れない のでnginxで拒否します。ネムイ(´・ωゞ) # /etc/nginx/nginx.conf if ($ht…
ckeditorはデフォルトだと誰でもアクセス可能となっているので認証機能を追加します。 cancanを利用する場合は Ckeditor.setup do |config| config.authorize_with :cancan end でOKですが、独自の認証機能を使いたい場合は以下のようにします。 # config/in…
WYSIWYGといえばckeditor!ということで、ckeditorのインストールから画像のS3アップロードの設定までを書いていきます。 必要なgemをインストール Gemfileに以下を追加し、bundleでインストールします。 # Gemfile gem 'carrierwave',github: 'carrierwaveu…
Railsでよくある「開発環境では動くのに本番環境ではうまくいかない」パターン。 ckeditorが本番環境ではcssが 404 not found になってました。 以下の3行を加えてckeditorのアセットも一緒にプリコンパイルしてやればOKです。 # config/enviroments/product…
例えば、以下のように使わない変数が宣言されている場合警告が出ます。 array = [[1,2],[4,3],[2,1]] array.sort{|(k1, v1), (k2, v2)| v2 <=> v1} # 「assigned but unused variable - k1」と警告が出ます。 このように使わない変数にはアンダースコア_を使…
ただ単に重複した要素を取り除く場合は、uniqを使えばOKです。 a = [1,2,3,5,1,2,4] a.uniq => [1, 2, 3, 4, 5] 今回は、重複した要素そのものを取り出したい、つまり、先ほどの配列aから[1,2]を抽出します。 a = [1,2,3,5,1,2,4] a.uniq.map { | e | [e, a.…
印刷ページを別途用意するのもいいけど、ちょっとそれはめんどくさい。。 ってときに、css3のメディアクエリを使うと便利でした。 @media print{ .no_print{ display: none; } } <p>このパラグラフは印刷時には表示されるよ</p> <p class="no_print">このパラグラフは印刷時には表示され</p>…
結構ハマりました。 画像アップロードの構成としては、 CarrierwaveでS3にアップロード nginxでS3にリバースプロキシ small_lightで指定サイズにリサイズして表示 という流れをとっています。 アップロードした画像をS3から確認してみると正しい向きで表示さ…
ファイルを選択するまでは、てきとーにno photo画像をセットしておきます。 また、選択をキャンセルしたときはno photo画像がセットされます。 $(function(){ function readImage(input) { if ( input.files && input.files[0] ) { var FR= new FileReader()…
MBAのスタンドほしいなーとおもってたのですがイマイチいいのが見つからず困ってました。 で、知り合いのエンジニアにKickflipを教えてもらい、最高すぎてその場で即ポチりました。 MacBookにそのまま貼り付けるタイプなのでどこでも使えてちょー便利です。 …
RMagickを使って画像のリサイズを行います。 今回はサムネイル表示用にバージョンthumbもつくってみます。 gemのインストール # Gemfile gem 'carrierwave' gem 'rmagick' # 今回のリサイズ処理に必要 リサイズ処理を記述 # app/uploaders/image_uploader.rb…
画像のアップロードにcarrierwaveを使ってみたのでメモがてらまとめます。 ほかにも、比較的実装が容易なpaperclipやcarrierwaveの後継であるrefileも使ってみましたが、保存先のディレクトリ指定、ファイル名変更、確認画面作成などの要件が満たせなかった…
例えば、画像へのリクエストをnginxでS3にリバースプロキシしていると、テスト用のBasic認証で閉じられた環境で適用するとS3側で弾かれてしまいます。 サイト全体にBasic認証かけてる。 http { ... auth_basic "Restricted"; auth_basic_user_file "/path/to…
rubyのgemをいろいろ試している時に見つけたのでメモ。 methodで引数にアスタリスクを使うといい感じに値を取得することができます。 アスタリスク1つ*だと配列、アスタリスク2つ**だとハッシュを指定できます。 def foo(a, *b, **c) [a, b, c] end こうす…
キャンセルやリセットの処理をするリンクにはconfirmを追加したい! Rails4では以下のようにヘルパーで実現できます。 link_to 'キャンセル', "/hoge/fuga", :data => {:confirm => 'キャンセルしてもいい?'} 参考 How to add confirm message with link_to…
ちょっとたまってきたのでメモがてらまとめます。 1. Hashを逆順にする あるハッシュ h = { "1" => "a", "2" => "c", "3" => "y", "4" => "x" } を逆順の { "4" => "x", "3" => "y", "2" => "c", "1" => "a" } にしたい場合、Arrayのreverseが使えます。 rev…
作業環境 $ ruby --version ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-darwin14.0] $ rails --version Rails 4.1.1 実装手順 必要なgemのインストール まずはomniauthをgemでインストールします。 gem 'omniauth' gem 'omniauth-facebook' gem 'om…
Vim幼稚園からVim小学校へ - Qiita で書かれていて勉強になった小技を忘れないようにメモっておきます。 W B:移動スピードアップ。 wを打つと次の単語の頭に、bを押すと前の単語の頭にジャンプする。大文字のWとBは記号を単語の一部とみなすのでジャンプ距…
Rails4.1.0から使えるようになったenumがめちゃめちゃ便利です。 例えばUserモデルにstatusというINTのカラムがある場合、enumを使うと直感的に管理できるようになります。 class User < ActiveRecord::Base # ステータス: temporary (仮登録), active (本登…
gitのバージョンが古かったのでbrewでバージョンアップしました。 $ brew update $ brew upgrade git $ git --version git version 2.3.5 すると、常にユーザ名、パスワードが求められるように。。 $ git pull origin master Username for 'https://github.c…