railsがんばる子

Ruby on Railsがんばる子です。胡蝶蘭のECサイトを運営しています。

rails

ActionMailerを使ってる時にERBテンプレートでエラーしたときの原因特定方法

ActionMailerにて、erbテンプレートを利用することはよくあると思いますが、開発中にエラーが起きても下記の様に原因がよくわからないことがあります。 > Mailer.sth(@order) => #<ActionMailer::Base::NullMail:0x007f93bf3c8638> ERBテンプレートだけを検証することで、原因を探ることが出来ます。 > ERB.n</actionmailer::base::nullmail:0x007f93bf3c8638>…

rubyでGoogle Sheets APIとGoogle Drive APIを使ってみた。

みんな大好きExcelファイルをシステムで自動生成してメールで送付してほしいという案件にあたりました。 そこで、みんな大好きGoogle様のAPIを使ってExcelファイルを生成しました。(※ なぜRubyXLという便利なgemを利用しなかったのかはこの記事の最後をご参…

/xxx.txtなどのアクセスを受けた時、MissingTemplateエラーが出力される

何が起きたのか /xxx.txtなどのアクセスを受けた時、MissingTemplateエラーが出力される 概要 404.txtをrenderしようとするが、404.html.erbなどHTMLファイルしか用意していないことが原因である。 なるほどね。 まあ、当たり前ですよね 解決策 Railsで対応…

railsでgoogleのclient idを拾う

Google Analyticsではgoogleのclient idを一意にしてユーザの特定を行っているようです。 こんなやつです。 gyazo.com cookieに_gaというキーで登録されており、サーバーに送信していることについ最近きがつきました。 たとえば、ホットペッパーさんのサイト…

Rails5セットアップしてみました

Rails5が気になってきたので、ちょっとだけ試してみました。 デフォルトのWeb ServerがWEBrickからPumaになっていて「初動が爆速になったな」という印象を受けました。 (開発中のプロジェクトがモジュール多すぎて、起動が遅いというのもありますが...) 環境…

font awesome update

awesomeのdocをみてて、使えないフォントとかがある場合はアップデートすると解決するみたいです。 font awesomeのアップデート bundle update rails-assets-fontawesome

N+1の原因

N+1の原因 includesしていない 常識なので、割愛 includesしているが、order、allなどActiveRecordの操作をしている http://stackoverflow.com/questions/27862670/rails-has-many-through-and-n1 対策 allやorderを代替手段に変更する ActiveRelationが複数…

delayed_jobについてのメモ

はしらせる RAILS_ENV=production bundle exec bin/delayed_job start queueをみる http://localhost:3000/jobs

RailsのURL生成ヘルパーにて、違うホストのURL+クエリストリングを生成する

RailsのURL生成ヘルパーにて、違うホストのURLを作ろうとした時に壁にあたりました。 違うホスト、かつ、クエリストリングを追加するパターンです。 hoge_tokenを付与。 > url = xxx_url(@request, {hoge_token: 111}) => "http://localhost:3000/xxx?hoge_t…

urlを生成するときに、ホストを変える

xxx_url(host: host_name)

rails migrateとrollbackの両方ができなくなってしまった

教訓 migrationファイルは手動で編集しないこと カラムを変更するなど、rollbackが出来ないmigrationファイルを作成しないこと 事象 ステージングでdb:migrateとdb:rollbackが効かなくなりどうしょうもなくなってしまった。 原因 migrate済みのファイルを二…

has_one throughは、includesで代替可能

has_one throughは、includesで代替可能 has_one :fuga has_one :hoge, through: :fuga default_scope -> { includes(:hoge).references(:hoge).where(hoge: {id: xxx} } has_one :fuga default_scope -> { includes(fuga: :hoge).references(:hoge).where(h…

Geocoderで半径XXm以内の何かを探す。

setupなどは参考サイトで。 僕が使ったのは、near機能です。 ActiveRecordモデル#nearメソッドを使うと、1km以内のレコードとかを探してきてくれます。 かっこいいです。 実行 A.near('35.659, 139.703', 0.6, :units => :km).collect(&:id) #=> 0.6とすると…

throughを使って孫の数を数える

検証用にモデルを作成 bundle exec rails g model a bundle exec rails g model b a:references bundle exec rails g model c b:references bundle exec rake db:migrate モデルに関連を追加 class A < ActiveRecord::Base has_many :b has_many :c, through…

Google APIを使ってファイルの親ディレクトリを調べる

仕事しているとGoogleスプレッドシートのURLやらDocのURLやらを教えていただくのですが、親ディレクトリが知りたいときとかあると思います。 コピーして使うときとか、そもそも何が入ってるんだっけ?みたいな。 Webで使い方を調べても良かったのですが、訓…

partial templateにクラス変数は使わないこと

@hogeみたいなクラス変数をpartial templateに使うと、同じ命名のクラス変数を定義しないとそのpartial templateが使えなくなってしまうので、やめたほうがいいです。 やってしまって、恥ずかしいです。

rails asset

フロント系のプラグインはrails assets経由でインストールする。 Gemfile gem 'rails-assets-infinite-scroll'

magnum-ciでサブドメインのテストにこけた

magnum-ciでサブドメインのテストにこけた。 同僚に相談したら解決してくださいました。 頭あがらないです。。。 before stepで/etc/hostsに127.0.0.1 subdomain echo "127.0.0.1 subdomain" | sudo tee -a /etc/hosts or sudo sh -c "echo 'something' >> /…

infinite-scrollを使って無限スクロールを実装した

参考ページのみのメモとなります。 infinite-scroll/infinite-scroll infinite-scroll/infinite-scroll · GitHub Rails で Infinite Scroll と kaminari を使いTwitterやFacebookのようなスクロールによる動的ページロードを実現する - Rails Webook Rails …

簡単PDF出力

PDFを出力したいときのためのメモ。 class ClientsController < ApplicationController # ユーザーはリソース受信時にHTMLまたはPDFをリクエストできる def show @client = Client.find(params[:id]) respond_to do |format| format.html format.pdf { rende…

form_authenticity_tokenで認証トークンを作る

formヘルパー使わなかったときにリクエストフォージェリを防ぐためにform_authenticity_tokenで認証トークンを作る。 Railsでは、formヘルパーを使用して生成されたあらゆるフォームにトークンを追加します。従って、この攻撃を心配する必要はほとんどありま…

form_forでは単数形リソースを自動的に扱えません

ハマったわけではないけど、railsガイドを読んでいて将来ハマりそうだなと思ったのでメモ。 ある長年の未解決バグ が原因で、form_forでは単数形リソースを自動的に扱えません。これを解決するには、以下のようにフォームのurlを直接指定します。 form_for @…

migrationファイルをmvして、やらかした話

rails generateしてmigrationファイルを作って動作確認後、名前が気に入らなかったのでmvでリネームしました。 そのままpushしたらmigrationエラーが起きました。 いやはや、恥ずかしい! NameError: uninitialized constant XxxxYyyyZzzzz

Settings.ymlに定義する基準について

railsにSettings.ymlってあるじゃないですか? 僕の参加しているプロジェクトでは、数値があると必ずSettings.ymlに書きなさいという指摘を受けます。 search_begin = Time.zone.now - 1.days # 指摘:1.daysはSetting.ymlに移動してください 僕的には、すべ…

pryで出た、call 'Hoge.connection' to establish a connectionの対応

pryでモデルをいじろうとしたらエラー え? なんで? [1] pry(main)> Hoge => Hoge (call 'Hoge.connection' to establish a connection) ActiveRecord::Base.clear_cache!したら良いらしい。 [2] pry(main)> ActiveRecord::Base.clear_cache! => nil [3] pr…

rails generator integration_test などが動かない

bundle exec rails g integration_test hogeと唱えてみても何も出てこない。 なんでぞ?!ということで調査です。 config/application.rbで無効にしていたのが原因でした。 config.generators do |g| g.controller_specs false g.routing_specs false g.help…

subdomainでrspecしたいがハマる。

かいけつしてない。 そこそこ前に解決してた。 Gistの通りなんだが、 def switch_domain Capybara.app_host = "http://sub.#{DEFAULT_HOST}:#{DEFAULT_PORT}" end 参考にさせていただきましたページ。ざーーーす! Support for Rspec / Capybara subdomain i…

rails rspecのgenerate

僕が参加しているプロジェクトは今、テストがほぼ無い。 病んでいます。 よくデグレ起こして気まずいです。 ということで、テストの鬼となります。 とりあえず、ジェネレート!! rails g rspec:controller [xxxxx] 参考にさせていただいたページ RailsでRspec…

find_eachとfind_in_batchesの違い

忘れないようにメモ find_each: 取ってきたデータは1件ずつ処理 (yield) される find_in_batches: 取ってきたデータは配列でまとめて処理 (yield) される 参考にさせていただいたページ Railsで大量のデータをまとめて更新するならfind_each使うよね - (゚∀゚)…

IntelliJ IDEA14でrailsスクリプトを使う

bundle exec rails runnerをIDEAでデバッグしたかったのだが、やり方が分からなくって苦戦しました。 rails console経由でスクリプトを渡して実行することで実現できたので、まぁ、それでもいいかと思ってます。 Run/Debug Configurations IRB consoleとして…