2016-05-01から1ヶ月間の記事一覧

eachの戻り値について

eachの戻り値がわかってなかったので、備忘録で書いておきます。 fruits = %w(apple orange grape) def sample puts "hoge" puts yield puts "Hoge" end sample do fruits.each do |fruit| "I like #{fruit}" end end → hoge apple orange grape Hoge I like…

less +Fでログ監視を知っていますか?

先程記事を書いたばかりなのですが、調べていたら、未だにtail + f でログ監視しているの?という煽り記事を見たので、早速試してみましょう。 使い方 less +F log/development.log これでこんな感じでログ監視できます。 lessのいいところは、この状態でcon…

tailでログ監視方法

ログ監視方法にtailを使うと、リアルタイムでログを更新してくれます。 仮にrailsで開発環境のlogを監視していたとします。 使い方 tail -f log/development.log -f オプションをつけることで、止まることなく動いてくれます。 小技 ここでgrepを渡すと、気…

railsでモデル内にvalidationを書く

前回の記事では、共通化したvalidationの書き方でした。 mikamisan.hatenablog.com 今回は、単一のモデルでしか使わないvalidationの書き方になります。 書き方 class User < ActiveRecord::Base validate :email_validate def email_validate valid_address…

railsで独自のカスタムvalidationを作る

validationって意外に簡単に作ることができます。 controllerに書いていた、正規表現の入力チェックなどは、validationにしましょう。 こういうのをcontrollerに書くことで、controllerがどんどん重くなっていきます。 モデルの役割は検証もあるので、バンバ…

railsのsqlインジェクションの対策方法

sqlインジェクションという、昔ながらの攻撃技があります。 内容 アプリケーションが入力値を適切にエスケープしないままSQL中に展開することで発生する。 次のようなSQLを発行することを考える。 SELECT * FROM users WHERE name = '(入力値)'; ここで入…

rspecで関連するモデルもfactoryで簡単に同時に生成する方法

rspecで関連するモデルを同時に生成する方法があります。 下記のような所有関係を持っていたとします。 class User < ActiveRecord::Base has_many :posts end class Post < ActiveRecord::Base belongs_to :user end Factoryの書き方です FactoryGirl.defin…

railsのflashを改行して表示をする方法

flashを改行して表示させる方法です。 app/controllers/hoge def create ...何かの処理を書いている falsh[:notice] = 'hogehogehogehogehoge<br> ←<br>が混ざっている hogehogehogehogehoge' ... end ここでview側でhtml_safeをつけます。 app/views/hoge.html.slim…

rspecをshared_examples_forでまとめる

rspecで共通項があった場合、shared_examples_forでまとめることができます。 使い方 下記のようなmoduleがあったとします。 app/models/concerns/body_validators.rb module BodyValidators extend ActiveSupport::Concern included do validates :body, pr…

modelの共通のvalidationをまとめる便利なconcerns

railsのDRYの原則に基づくのなら、modelのvalidationに共通ができてしまったら、共通化したいですね。 そんな時に便利なのがconcernsです。 app/models/concerns こんなフォルダがあると思います。 ここに記述していきます 使い方 例えば、PostモデルとComme…

railsのurlをroot_url+手書きで書いてたりするの?

はい、書いてました。 手書きの何が悪いんだ! って思うんですが、テストや変更に圧倒的に弱いんですよね。 これが致命的ですね。 基本的に手書きで書くのはやめましょう。 手書きで書くというのは、こういうのですね。 url = root_url + 'contact' こういう…

unlessで結合した論理式を重ねていかない方法

hoge unless ~ ここの~でよく追加して条件を埋めていました。 自分がやっている場合は、いいのですが、何が困ったかというと、自分で振り返ってみたら分からなくなってしまします。 ~でない限りという否定の条件なので、これが深くなっていくと、ぱっと見で…

railsでもtransaction機能を使おう

railsからプログラミングをやりだした自分は、どうしてもsqlの機能についておろそかになってしまいます。 sqlの処理はデータベースの処理なので、大切なユーザーのデータです。 すいません、削除しちゃいました(テヘ では、問題がすみません。 そんな大事な…

rspecのassigns(変数名)に値を渡す方法

rspecのcontrollerでassigns(変数名)で値を受け渡すことができると書かれたいたのに、全く値を渡すことができませんでした。 原因がわかりました。 書き方 Post controllerがあったとします app/controllers/post_controllers.rb def index @posts = Post.al…

FactoryGirlのassociationをつけなくてもモデル間を関連づけする方法

FactoryGirlでモデルの関連づけをする場合は、associationを使ったりします。 ただし、なんでもassociationを使うと、テストが多くなるにつれて、テストが壊れやすくなります。 関連づけをする書き方は他にもあります。 associationのあり/なしの書き方を見…

Macのキーボードを日本語配列からUS配列に変更できるKarabinerを使ってみよう

mac

プログラミングをする場合、US配列の方が打ちやすいです。 自分は全く意識がしなかったですが、「;」「:」の切り替えはUS配列だと、shift +になります。 こういう小技が、タイピングする時に活きてきます。 あとは記号の位置になります。 自分はそのことを知…

rspecのbefore :each doについて

rspecの書き方で、beforeの書き方で:eachをつけていることがあります。 何か違いがあるのでしょうか?という備忘録です。 before :each do @smith = Contact.create( firstname: 'john', lastname: 'Smith', email: 'jsmith@example.com' ) @jones = Contact…

サーバー監視ツールmuninについて調べてみた

muninを業務上使うことになったので、調べてみました。 Munin サーバー監視ツールっていう、便利なものが世の中にはあるんですね。 SQLの発行が遅い・・・みたいなこともできるようです。 すごい世の中だ・・・ サーバー監視ツールの役割 そもそもサーバー監…

プログラミングの基礎(真偽値を返す関数)

プログラミングの基礎は購入していました。 ただ、ずっと手づかずだったのですが、GW中に少しやっていました。 プログラミングの基礎ではocamlを使います。 ocamlの特徴として、rubyと異なっているなと感じた点です。 型変更はできない これは大きな違いだな…

gemのawesome_printでirbの表示形式を整形できる

irbを使用していると、オブジェクトが整形されて出力されません。 小さいデータならいいのですが、量がかさばってくると探すだけで正直しんどいです。 そんな時に便利なgemがawasome_printです。 github.com 使い方 インストール gem install awesome_print …

rubyのyieldについて

yieldはrailsで見かけますが、よく理解していなかったです。 ここでyieldについて説明します。 ブロックについて yieldについて話をする前に、ブロックの話をしないといけません。 そもそもブロックってなんですか?というところですね。 name_list = %w(ali…