Rails

Rails5でActiveSupport::PerThreadRegistryがdeprecatedになったよヘ(^o^)ノ

ちょっと今更ですが、Rails5でActiveSupport::PerThreadRegistryがdeprecatedになった。 ActiveSupport::PerThreadRegistryを使ったほうがイイ理由は遠い昔に書いたブログを参照してね。 murajun1978.hatenadiary.com ActiveSupport::PerThreadRegistryにも…

RailsのPolymorphicでhas_oneするヘ(^o^)ノ

Polymorphicのhas_one関連を書いてる記事が少なかったので ついでにPolymorphicのおさらいしておく 環境 Ruby 2.3.0 Rails 4.2.6 モデルをgeneratorでつくる # zshなんでエスケープしてますです $ bin/rails g model picture imageable:references\{polymorp…

Arrayでinjectを使ってみるヘ(^o^)ノ

injectはとても便利( ˘ω˘) [1, 2, 3].inject(:+) #=> 6 こんな感じで読みやすくていい感じ total_price = 90 total_price += [10, 20].inject(:+) #=> 120 Railsのバリデーションとかで使うならこんな感じかな # 以下の値を仮定 limit_total_price = 100 tot…

TempingでMixinするmoduleのテストをしてみる٩( ‘ω’ )و

RailsでモデルにMixinするモジュールをテストしたいとき、みなさんどうしてますか? mock_model? stub_model? 自分のダミーテーブル作る? 各モデルでテストする? どれも意外と面倒くさい そんなときはTempingを使うと楽ちん ActiveSupport::Concernのモジ…

action_controllerの拡張gemをRSpecでTDD ٩( ‘ω’ )و

action_controllerの拡張gemを作成するときにrspecでテストする ユーザ認証のサンプルgemをTDDで作っていきましょう まずは、gemのひな形を作る $ bundle gem user_auth bundlerが1.9系なら以下のファイルが作成されてるはず ├── Gemfile ├── LICENSE.txt ├─…

ActiveSupport::PerThreadRegistryでThread.currentより安全にグローバルな値を保持する╭( ・ㅂ・)و ̑̑

Railsでグローバルデータを保持したいときに、Thread.currentを使えば簡単ですよね Thread.current[:current_user] = user Thread.current[:current_user] #=> user 僕も気軽に使ってましたが、最近こんな記事を見つけました。 Better globals with a tiny A…

ActiveSupport::OrderedOptionsを使ってHashで.(ドット)を使えるようにする٩( ‘ω’ )و

もはやActiveSupportなしでは生きていけない僕 Hashをイイ感じに拡張してるActiveSupport::OrderedOptionsです rails/railsgithub.com # activesupport/lib/active_support/ordered_options.rb module ActiveSupport class OrderedOptions < Hash ... end en…

Array#extract_options!で引数からオプションをひっこぬく٩( ‘ω’ )و

Railsでのvalidationを設定する時はこう書きますよね? validates :name, :kana, presence: true validatesメソッドに、symbolとhashが複数指定されています オプション部分はHashですねー 引数とオプション(Hash)を分離したいときに大活躍するのがArray#ext…

Adequate Recordでキャッシュされないケースヘ(^o^)ノ

第65回 Ruby関西 勉強会に参加したよヘ(^o^)ノのつづき スライドに、Adequate Recordでキャッシュされないケースを書いたけど、 ざっくりしすぎなのでまとめてみる( ˘ω˘) find_byを例にactiverecordのコードを読みながら確認していく コードはこんな感じ(コ…

神戸.rb Meetup #13に参加したよヘ(^o^)ノ

神戸.rb Meetup #13に参加しましたー 毎回思うがホント勉強になる 僕の思いもみんなに伝えられたし良かった 今日はActiveSupport::StringInquirerについて調べた 結構こんなの書いちゃいがちですよね? if Rails.env == 'production' ... end それが、こう書…

第65回 Ruby関西 勉強会に参加したよヘ(^o^)ノ

第65回 Ruby関西 勉強会に参加し、発表してきました。 発表内容はRails4.2の新機能について。 4.2がリリースされてから2ヶ月が経ちますが、ActiveJob中心に紹介させてもらいました。 発表中にデモする時があると思います スライド見ながらタイプするの大変で…

神戸.rb Meetup #12に参加したよーヘ(^o^)ノ

神戸.rb Meetup #12に参加しました。 僕はKonachaについて調べてました。 会社でRailsのJavaScriptをええー感じにテストしたい!ってことなので # Gemfile group :test, :development do gem 'konacha' gem 'selenium-webdriverd' end デフォルトのdriverはs…

神戸.rb Meetup #11 に参加したよヘ(^o^)ノ

Kobe.rbに参加してきたよヘ(^o^)ノ 今日のおやつ!! photo by @spring_aki おいしかった♪ 今日、僕が調べてたのはActiveDecorator + Capybara + RSpecです。 ActiveDecoratorでhelperを良く使いますよねー 例えばこんなの... def full_name content_tag :td…

Rails - ActiveDecoratorのコード読んでみたヘ(^o^)ノ

いつもお世話になります。ActiveDecoratorさま。 @izumin5210さんの「ActiveDecorator読んでみたら超勉強になった」を読んで、そういやコードあんま見てなかったので読んでみた なるほど編 alias_method_chain 既存のメソッドを拡張するときにちょー便利♪ si…

神戸.rb Meetup #10に行ってきたよヘ(^o^)ノ

今日は神戸.rb Meetup #10に行ってきた。 仕事が押して1時間ほど遅れてしまったけど。。。( ̄▽ ̄;) みんながそれぞれ興味あることをワイワイ話したり、もくもくしたりと良い感じです。 おやつもあるっ!!! 僕はcocoon(こくーん?)ってgemを使ってみまし…

Rails - ActiveModel::Callbacksでカスタムコールバックヘ(^o^)ノ

あけましておめでとうございます。 年内で仕事が納まらず、1日からコードをごりごり書いております。。。 さて、ActiveRecord::Callbacksはみなさんおなじみ before_saveとか良く使いますよね? でも、今回やりたい事はこういうの # app/models/comment.rb c…

Rails - touchオプションでupdated_atを更新するヘ(^o^)ノ

class Post < ActiveRecord::Base has_many :comments end class Comment < ActiveRecord::Base belongs_to :post end pry(main)> Post.find(1) +----+-------------+------+-------------------------+-------------------------+ | id | title | body | cr…

Railsでpostした時間を○○minutes agoみたいに表示するヘ(^o^)ノ

今日、Twitterで@netwillnetさんと@chiastoliteさんのツイートをみてやってみた @netwillnet time_ago_in_wordsすかね— Hiroyuki Morita (@chiastolite) 2014, 11月 17 Railsではtime_ago_in_wordsヘルパーが用意されています でも、この子はリアルタイムで…

Railsでデータを登録後にメールを送信ヘ(^o^)ノ

Railsでユーザ登録後にメール送信することはよくあります。 今日、その部分を見てて気になったのでメモ程度に もともとはこんな感じのコードやった # app/controllers/user.rb def create @user = Post.new(user_params) @user.save UserMailer.wellcome_ema…

Gretelで簡単パンくずリストヘ(^o^)ノ

Railsでパンくずリストを表示するのにGretelをつかってみた 基本的な使い方ー # config/breadcrumbs.rb crumb :root do link 'Home', root_path end crumb :posts do link 'Posts', posts_path end crumb :post do |post| link post.title, post parent :pos…

RansackでDateTime型の検索してみるヘ(^o^)ノ

Ransackはとっても便利ですよねー さらっとしか使えてないので、ちょっと調べてみました eqは完全一致、contは中間一致 などなどとっても簡単に検索機能を実装できます そこでDateTime型のフィールドを検索したい場合、時分秒までは検索しないですよね? や…

Railsで同じwhere句のチェインヘ(^o^)ノ

チェインかチェーンかはさておき Railsではメソッドチェインは普通に使いますよね? scopeのチェインもよく使います こんな感じ Post.user_by(@current_user).search_tag_by('Ruby') では、動的に利用したいscopeを利用したい場合は? scopeではないですが、…

Railsのdiv_forヘルパーを使ってみたヘ(^o^)ノ

Railsのヘルパーでdiv_forなるものがあります。 この子ちょっと便利で、いわゆるページ内リンクを実装できます。 使い方は <% @post.comments do |post_comment| %> <%= div_for post_comment do %> <%= post_comment.comment %> <% end %> <% end %> すると…

RSpecでhas_manyのテストヘ(^o^)ノ

Railsでhas_manyなテストするときー こんなのをテストしたい場合 RSpec.describe Address, :type => :model do describe 'Relation' do it 'has many customers' do expect(address.customers).to match_array customers end end end まずは、FactoryGirlで…

Railsのmodelインスタンスでexists?を使うと...

Array#include?のレスポンス改善ヘ(^o^)ノで改善されたレスポンスですが、まだ遅いw と言うわけで、ログを眺めていましたー するとこんなクエリーが... 注) テーブル名は勝手につけた Post Exists (0.2ms) SELECT 1 AS one FROM "posts" LIMIT 1 コードを見…

Arrayの展開ヘ(^o^)ノ

Rails4からpluckが複数カラムに対応しましたねー こんな感じで、特定カラムの値が配列で取得できます。 Post.pluck(:title, :description) # => [["Murajun's Style", "Arrayの展開ヘ(^o^)ノ"]] とっても便利ですよねー んじゃ、カラムを動的に取得したいで…

Railsで子テーブルのスコープを使うヘ(^o^)ノ

例えばこんな感じのモデル class User < ActiveRecord::Base has_many :posts end class Post < ActiveRecord::Base belongs_to :user scope :published, -> { where(published: true) } end 公開中のPostを取得する場合はこんな感じですよね? $ Post.publi…