読者です 読者をやめる 読者になる 読者になる

kikeda1104's blog

備忘録・技術に関することを書いています。(webエンジニア)

FormObject実装(2回目)

前回からの引き続き。viewとcontrollerの実装を進めていきます。 前回まで FormObject実装(1回目) - kikeda1104's blog controllerの実装 # controller/sample_forms_controller.rb class SampleFormsController < ApplicationController def new @offer_for…

FormObject実装(1回目)

form_objectの実装を進める際に、gem virtusを使って実装を進めたので、何度かに分けて書いていきます。 環境 Cent 7.x rails 5.0.0.1 ruby 2.3.3 gemの導入 Gemfileに追加します。 # Gemfile ... gem 'virtus' ... $ bundle install app/forms app/formsの…

ActiveRecord::Base.establishによる複数回切り替え時の不具合

掲題の件、テスト書いていることで発見できまして、APIリファレンスを読むと割と合点はいきましたが 間違えなどあれば、指摘いただきたいです。 環境 - rails 5.0.0.1(puma) - ruby 2.3.1 ActiveRecord::Base.establishを何度も読み出すことで、queryを発行…

Strong parameterで受け取れなかったparameter

Strong Parameterを使っていて、取れないケースあたってしまい、後回しにしたので、気になっている。 Workaroundや、Hackな対応をする予定なので、明日また書き直す。 { hoge: { id: '1', name: '2', age: '29', '1': { ... }, '2': { ... } } } class HogeC…

Module名を切り出してclass_nameを取り出す。

Qiitaに同じ内容の記事が丁度あって悲しい気分になったが、コードを書いていたので記録として残しておく。 本ブログは、備忘録という面もありますので、読まれている方は気分を害さないでいただきたいです。 動的にSQLのテーブル、カラムの別名を定義したく…

Factory Methodの利用(Ruby)

Rubyによるデザインパターンという本を借りたまま、持っているのですが、たまたま実務でFactory Methodパターンを利用するのに 良い機会が得られたので、本を思い出しながら設計/実装を進めました。周りを気にせず、実装に集中できるのは楽しいですね。 前…

フィーチャーテスト(Rails + Rspec + Capybara)

追記: コメントをいただきまして、一部内容を更新しています。 今朝、rspec 3.5リリースの記事*1をrspecの公式HPから確認した所 Rails 5 では、 assigns と assert_template が soft deprecated になりました。 という内容が書いてあり、今までcontroller sp…

認証機能のユニットテスト(controller)

今日は、自作のアプリでユニットテストを作っていたので、このあたりを書いていきたいと思います。 自作アプリでは認証のgemは使っていないんですが、記事のためにsorceryを使って書いていきます。 gemの導入手順は省いています。 準備 # Gemfile gem 'sorce…

whereの指定方法

ActiveRecordを利用していて、どうやってwhereを書くのかわからないことがありますし 良く聞かれたりもしますので、書き方について、まとめておきます。 where ActiveRecordの条件を記述する際に利用します。 model # app/models/user.rb class User < Appli…

サービス層の導入

業務で、サービスクラスをmodelsに入れていたので、そのファイルの移動と自作でサービス層を追加しました。 serviceクラス Modelに書くにはコードの量が多い機能で、Fat modelになる恐れがあり、concernに移す事も考えましたが、共通で利用することもないた…

ActiveRecord::Relation#orのworkaround

先日書いた記事の付け足しになりますね。orを利用して検索ロジックを書いていましたが mergeや、whereを利用することで構造に不一致になるケースがあり、HACK,WORKAROUNDで対処しました。 原因はなんとなくイメージできているんですが、詳しい方いましたら、…

Railsでmysqlのviewsを利用する。

弊社のプロジェクトで、viewを利用していたので、覚え書き。 views CREATE VIEW user ( id, name, age ) AS SELECT id, name, age FROM A UNION SELECT id, name, age FROM B; ここは、migrationに置き換えることもできる。 model モデルは、Railsのmodelと…

ActiveRecord::Relation#or

弊社の新規プロジェクトでは、Rails5が使われていてそのおかげで、orが利用できた。 今日は、その辺りをまとめてみる。 ActiveRecord::Relation#or Rails 4系では、sqlのorをアプリで実装しようとするとfind_by_sql、where、joinsなどに直接sqlを書くか。Are…

form_tag、form_forからutf8というパラメータをはずす

検索の機能で、HTTP methodsをpostからgetに切り替えた際に、utf8というパラメータが含まれていたので、これを取り除いた。 form_for, form_tagから自動で生成されるinputタグだが、不要だったので、自動生成されないように変更した。 モンキーパッチ module…

Rubyのモジュール

コードを整理する際に、classではなく、moduleで整理したいと思う場面がありました。 Railsで書いていることもあり、ActiveSupport::Concernにまとめる形にします、 moduleクラスに機能を混ぜ合わせることで複数のクラスで機能を共有する(Mix-in)という機能…

複数ファイル内の置換

複数ファイルを一度に置換したくて使っているコマンドです。 railsのroutes.rbを修正して、ルーティングヘルパが変わったので一斉に置換しました。 find . -type f -print0 | xargs -0 sed -i -e “s/info_salutation_path/salutation_path/ macOSの場合は、i…

constraintsの利用について

後輩にvimの折り畳み開閉のショートカットキーを聞かれてて、忘れてたのに落ち込んだり、 参加したセミナーでテストコードに関する有益な話を聞けてほっこりしてます。 コミュ力って重要。 Railsのroutes.rbで、ルーティングを無条件で利用すると、public下…

friendly idを利用したURI設計

プロジェクトでSEO対策と数値を含めずにURIを設計するため、friendly_idを採用してURIの再設計をしました。 railsではURIにmodelの主キーを含める形の設計が主になりますが、数値では分かりづらくなります。(resourceでは作成されませんが) それほど複雑な仕…

Rspecでseeds.rbをリセット時に読み込む。

プロジェクトにrspecとfactory girlのgemを追加して seeds.rbを読み込んでから、毎回テストを起動したかったのでこのあたりをまとめておく。 環境 Mac OS rails new済み rspecとfactory girlの導入 まずは、Gemfileにrspec_railsとfactory_girl_railsを追加…

gem unicornの起動・定義・再起動

こんにちは。kikedaです。 毎回忘れるので、備忘録代わりに書いておきます unicorn コマンド 起動 railsのrootディレクトリで実行する bundle exec unicorn_rails -c config/unicorn.rb -E development -D 停止 railsのrootディレクトリで実行する kill -QUI…

link_toのリンク文字列にHTMLタグを入力したい(Rails 3系、Rails4系)

kindle voyageをやっと手に入れました。kikeda1104です。 link_toに、htmlタグを含めたい際の記述について、調べたのでこちらに書きたいと思います。 備忘録ですね。 コード やりたいコードは下記になりますね。 <a href="#"><p>リンクです</p></a> 修正したコード で、Railsのヘル…

route.rb(namespace, member) (Rails 4.x)

Railsは、DSLが豊富ですので、覚えるのは大変ですね。 routesで使われるDSLの一部を紹介したいと思います。 routes.rb URLから実行するControllerのactionとのひも付けを表すファイルです。 namespace informationコントローラのroutingを書く際に、informat…

Railsの並び替え

railsでのソート処理 簡易的ソートで数値、文字列の昇順、降順の方法を記述しておきます。 引数の書き方について、忘れることが多いのでメモです。 並び替え order("col_name asc or desc") col_nameを昇順で並び替えたければ、asc 降順で並び替えたければ、…

modelにクラスメソッドを定義

またまた備忘録。 modelクラスからstatusとstatusの意味の一覧を配列で返したくて、クラスメソッドにしました。 statusの全ての値を返したい訳でもなかったので、メソッドで必要なstatusだけ返すようにしてます。 class hoge def self.hoge [ { status: 'pen…

社内のCrafting Rails 4 Application読書会を終えて

タイトルの通り、社内で有志を募って読書会が開かれました。 自分もぜひ参加したいと、希望を出し参加しましたが英語でありさらにRailsの内部仕様に触れる著書であり 読むのと、発表資料を作成するのにかなりの労力を使うことになりました。 参加者は4人で、…

Hash#reverse_mergeとHash#reverse_merge!

タイトルのClass#Methodをransack gemで見かけたので、調べてみました。 ActiveSupport::CoreExtensions::Hash::ReverseMergeのソースは下記になります。 https://github.com/rails/rails/blob/master/activesupport/lib/active_support/core_ext/hash/rever…

view周りのコーディング

html、css,action_viewを忘れまくり。 今日は備忘録、その場その場で調べては書いて忘れてしまうので書き留める位はしておく。 *リンクに画像を利用する際の記述 <%= link_to image_tag('/', { size: '16x46', alt: '非表示の際' } ) %> *railsでのassets/ja…

migrationファイルの記述

railsのmigrationファイルを記述する際に、細かいところもつめておく。 urlを扱う場合、string型かもしくはtext型のどちらかを選ぶでの考えておく。 といっても、databaseがmysqlであれば、string型を指定すると VARCHAR(255)であるから 255バイトを超えるな…

capistranoの実装

Virtual boxに構築したCent OSにcapistrano 3を利用してデプロイできるようにしようかなと。awsが理想的だったんですが、お金がかかるのでやめました・・。 アプリはbe rails newで,それをローカルからCent OSに向けてデプロイします。 railsアプリの作成 be…

gem query_report

職場で使われているgem query_reportについて、調べる機会があったので実装方法について書いておきます。 このgemは、管理画面でつかわれることになると思いますが、管理画面をつくるのであればrails_adminというgemもあります。 query_reportの機能は、 act…

Railsのtime_zone

勉強会周りの記事をあと2つほど書く予定ですが、レポートで出力されている日付とユーザが入力する日付を日本時間として扱うためにいろいろ調べたのでそれをまとめておきます。 active_recordからDBにレコードを保存する際に使われるtime_zoneとアプリ側で使…

Rails東京勉強会87回(後半)

前回の記事で読んでおくとTDDをやるうえで事前に読んでおくと良い記事を書いた。今回は、その続きから書きます。 記事の紹介を終えたところで質疑応答の時間がとられていて なぜ、テストが必要なのか、からどこまでテストを書くのか などがあげられていて、T…

Rails東京勉強会87回(前半)

ずいぶん日をおいてかくことになったなと思いましたが、Rails東京勉強会87回に参加したあとのアウトプットをだしておきます。 目黒のドリコムのオフィスにある一室と会議室などを借りて開かれました。 勉強会が始まると参加者が自己紹介とやりたいことなどを…