つらくないマルチテナンシーを求めて: 全て見せます! SmartHR データベース移行プロジェクトの裏側 / builderscon 2018
2013.08.06 Railsでbefore_filter/before_actionがアクションを中止する仕組みを読んでみる 大昔のRailsでは、before_filterでfalseを返すとそこでchainが終わる、とやっていた気がしますが、今はそういうコード見ないですよね。 Rails 4だとこんなノリでbefore_actionでredirectして はいおしまい、ってやりますよね。 class UsersController < ApplicationController before_action :my_authenticate_admin def my_authenticate_admin unless current_user.admin? redirect_to root_path end end end 当然、以後のbefore_actionやactionは実行さ
RailsのActiveRecordを使って次のようにすることでSTI(Single Table Inheritance: 単一継承テーブル)を行うことができます。 テーブルにtype(string)カラムを持たせる そのテーブルに対応するモデルクラスを継承したクラスを作成する 例えば、本(Book)とコンピューター(Computer)の商品を扱っており、一部カラムが同じで一部カラムが違うので、次のように1つのテーブルを使い、3つのモデルを作成することで、Rails側でbooksテーブルとcomputersテーブルが存在しているようにBookオブジェクトとComputerオブジェクトを扱うことができるようになります。 これにより、 Product.all # => Book, Computerモデルを含めたすべてレコードをproductsテーブルから取得 Computer.all # =>
ステップ数で評価が決まる現場では全く役に立たないテクニックではありますが、ソースコードの減らし方について紹介したいと思います。 開発Div. エンジニアのayasudaです。 2014年の夏にジョインし、会社名と同じサービス、クラウドワークス の開発に携わっています。 ご覧の通り、消したソースコードの方が多いので、ステップ数換算だとマイナスの働きしかしてませんね! 本記事では、特に Ruby on Rails の運用されているプロダクトコードにおける、ソースコードの減らし方について紹介していこうと思います。 基本的な考え方 ソースコードを減らすときの大原則は「ボーイスカウト・ルール - プログラマが知るべき97のこと」です。 普段、ソースコードを触るときに、一つでも良いので簡単な改善を入れる。これを積み重ねるのが大事です。 一度に一気に直そうとするのはあまり良くありません。大抵の場合、デグ
Posted by naruse on 25 Dec 2014 We are pleased to announce the release of Ruby 2.2.0. Ruby 2.2 includes many new features and improvements for the increasingly diverse and expanding demands for Ruby. For example, Ruby’s Garbage Collector is now able to collect Symbol type objects. This reduces memory usage of Symbols; because GC was previously unable to collect them before 2.2. Since Rails 5.0 wil
Rubyでcamel case(例えばCamelCaseのように、単語の先頭の文字を大文字にしてスペース無しでつないだ書き方)の文字列をsnake case(例えばsnake_caseのように、全て小文字の単語をアンダースコア「_」でつないだ書き方)に変換するには、以下のようなメソッドをStringクラスに追加することで実現します。 module StringUtils def to_snake_case self.gsub(/::/, '/'). gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2'). gsub(/([a-z\d])([A-Z])/,'\1_\2'). tr("-", "_"). downcase end end String.send :include, StringUtils Railsで使用する場合には、上の内容を例えば app/lib/str
2014-08-10 Railsの has_many/belongs_toメソッドによる1対多関係などのモデル間のアソシエーション(リレーション)の作成方法 Rails基礎 Rails Model RailsのActiveRecordの has_many/belongs_toメソッドで「1対多」関係 has_and_belongs_to_manyかhas_many through:メソッドっで「多対多」関係 has_one/belongs_toメソッドで「1対1」関係 を作成することができます。 目次 「1対多」関係 「多対多」関係 「1対1」関係 動作確認 Rails 4.1 「1対多」関係 概要 冒頭でも述べましたが、 has_many/belongs_toメソッドを使うことで「1対多」関係を作成できます。 このとき、belongs_to側のデータベースのテーブルにはxxx_idが
革命的に速いとされるRuby用の新しいアプリケーション・サーバー「Raptor」のサイトが公開され期待を煽っています(Hacker News)。 公式サイトによると、RaptorはRailsやSinatraなどを動かすための新しいアプリケーション・サーバー。最適化されたHTTPエンジンにより従来のアプリケーションサーバーと比較して高速に動作し、Unicornの最大4倍、PumaとTorqueboxの最大2倍の速度で動作するとのこと。 現在まだ何もダウンロードできるものは公開されたおらず、パブリックベータ版のリリース日は2014年11月25日に設定されています。メールアドレスを登録しておくと、状態が更新されるか、あるいは第三者のレビューが公開されたときなどにメールで連絡してくれるようなので気になった方は登録してみてはいかがでしょうか。 ちなみに誰が開発されているかということに関しても「We
Rails で STI(Single Table Inheritance)を使った時の、コントローラの実装をどうするか?という事について書いてみたいと思います。 STI(単一テーブル継承)とは オブジェクト指向の基本概念として、あるクラスを元にサブクラスを定義する継承があります。 この継承は、プログラミング言語ですとと予め機能が提供されていることが多いですが、 RDB ですとテーブル構成によって表現する場合があります。 *1 今回使う STI は、一つのテーブル内に継承関係にあるクラスのカラムを全て持ってしまう方法です。 例として Player クラスを継承した Footballer クラスと Cricketer クラスがあるとします。 親クラスに共通のプロパティ、子クラスがそれぞれのプロパティを持っていますが、これを STI で表現すると以下になります。 テーブルのレコードがどちらの型に
そこそこの規模のWebシステムになってくるとバックグランド処理(batch処理)は欠かせないものになってくる。メールの送信、データの日次、月次、年次処理、削除(フラグ)データのpurgeやバックアップ、等々いろいろな物が出てくる。 現在はBackgrounDRbを使っているが、いろいろといまいちなので今回Resqueを評価してみた。ちょっと触った段階での第一印象をメモ。 まず、バッチ処理系で評価のポイントになってくる部分はなんだろうかと考えてみると、なんと言っても見通しのよさと異常系の処理だと思う。画面系と違い、バッチ処理は「見えにくい」ところで実行されるので、その二つが特に大事になってくる。「知らないうちに止まっていました」では困るのがバッチ処理。 たとえば、 異常時の処理無視?管理者に通知?リトライ? 復旧処理タスクの削除(問題を修復後)リトライ 状態の監視いくつのJobが残っているか
Ruby on Rails v3.2.11 ログ情報のレベル分け ログに書き出される情報は以下の5つのレベルのどれかに分類されています。 :debug デバッグ情報 0 :info 一般的な情報 1 :warn 警告情報 2 :error エラー情報 3 :fatal 致命的なエラー情報 4 Railsが動作している時には、どのレベルの情報までログに書き出すかを決める”ログレベル”が設定されています。ログレベルが「:debug」であれば全ての情報がログに書かれ、「:warn」であれば:warn以上、つまり:warning, :error, :fatalの情報だけがログに書き出されます。 動作モードによってデフォルトのログレベルが決められています。 動作モード(RailsEnv) デフォルトのログレベル development :debug test :debug production :i
こんにちは、ほりいです。風邪が流行っていて体調管理が大変なシーズンですね。 先週 “Rails 3.2.0 がリリースされました”:http://weblog.rubyonrails.org/2012/1/20/rails-3-2-0-faster-dev-mode-routing-explain-queries-tagged-logger-store ね。 Rails を使った Web 開発チームでは 3.2 を使い始めていますが、社内でも結局どう変わるの? という声がありましたので、勉強がてらみんなで “Ruby on Rails 3.2 Release Notes”:http://edgeguides.rubyonrails.org/3_2_release_notes.html を翻訳してみようという試みを行いました。その成果を公開したいと思います。 注意書き: * 1章「Upgra
Railsでmigrationを作成する時、changeメソッドだけが定義されていたり、upとdownメソッドの2つが定義されている時があります。 class AddColumnHoge < ActiveRecord::Migration def change end end class ChangeColumnHoge < ActiveRecord::Migration def up end def down end end こんな風に、migrationファイルを作成した時の名前で、生成されるclassのひな形が違います。 up/downについて upとdownメソッドは、migrateを実行した時の処理と、rollbackした時の処理を定義します。 upで変更したものは、downで元に戻るようにしておかないと、正しくrollbackできません。 class ChangeColumnH
ActiveRecordでクエリーを組み立てる時に、joinsメソッドを使ってINNER JOIN句を付けると、取ってきたレコードをsaveできなくなります。 その検証と、saveできるようにする、方法。 require 'logger' require 'active_record' # テーブル定義 class CreateShelves < ActiveRecord::Migration def change create_table :shelves end end class CreateBooks < ActiveRecord::Migration def change create_table :books do |t| t.integer :shelf_id end end end # モデル定義 class Shelf < ActiveRecord::Base has_m
Rails3のredirect_toで:noticeオプションを付けることでflashを使えるようになった。 ということで flash[:notice] = 'message' redirect_to :action => 'index' と書いていたものを redirect_to {:action => 'index'}, :notice => 'message' と修正したのだがこのままだとエラーになってしまう。 ネットで調べると、どうやら引数で渡したハッシュの「{」記号がブロックとして解釈されてしまうらしい。 redirect_to ({:action => 'index'}, :notice => 'message') このように引数全体をカッコで括ってもだめ。 結局以下の書き方が正解だった。 redirect_to ({:action => 'index'}), :notice
Someone know how can I use this option in Rails 3.1? Now CoffeScript puts a function with .call(this) on each file, but I want to remove this. EDIT: "Can't find variable” error with Rails 3.1 and Coffeescript" and "Pattern for CoffeeScript modules" have what I want. I'll change my global vars to use @global scope.
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く