Rubyもしくは、RailsでPDFを作成するGemとしてThe Ruby Toolbox - PDF Generationで確認すると、有名どころとしては、 Prawn(プローン) PDFKit (+ wkhtmltopdf) Wicked PDF (+ wkhtmltopdf) ThinReports(Ruty Toolboxにないけど) です。 まとめ それぞれRails上で使ってみて、比較してみました。 Gem名特徴所感 Prawn(プローン) コードのみでPDFを作成する。 二重線などは少し作り込みが必要。コードでガリガリPDFを作成するので自由度は高いが時間がかかる。 PDFKit (+ wkhtmltopdf) HTMLをPDFに変換する。HTMLからPDFへの変換はwkhtmltopdfが行い、PDFKitはwkhtmltopdfのラッパー。 wkhtmltopdfがバグな
Railsのモデルのバリデーションエラーの扱い方について説明します。 errors(エラーメッセージオブジェクト)、独自のエラーメッセージの追加、エラーメッセージの表示、日本語化について説明します。 動作確認 Rails 4.1 目次 モデル(model)のエラーメッセージ errors の使い方 モデル(model)にエラーメッセージを追加 ビューにモデルのバリデーションエラーを表示 モデルのバリデーションエラーメッセージを日本語化 モデル(model)のエラーメッセージ errors の使い方Railsのモデル(model)でバリデーションエラーが発生した場合に、model の errorsにエラーメッセージが設定されます。さらに、full_messagesでバリデーションのエラーメッセージの配列を取得できます。 次のProductモデルが設定されている前提で話を進めます。 # app
セッション管理はWebアプリケーションを開発・運用するときに必ず関わってきますので、ある程度知っておかなければいけないことかと思うのですが、Railsのセッション管理について解説している資料が少ないように思えました。私もRailsのセッション管理についてあまり知識がありませんでしたので、簡単にですがまとめてみました。 なお、今回のエントリはセッション管理の大雑把な仕組みについて知っていることを前提にして進めていきます。セッション管理の仕組みについてご存知ない方は、『体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践』という書籍での説明がわかりやすかったので、そちらをご一読されると良いかと思います。 Railsのセッション管理方法 Railsでは、config/initializer/session_store.rbファイルにセッションの管理方法を指定します
※「原因」に加筆し,タイトルの「Windows」を「Windows 7」に変えた(2015/02/04) Rails アプリが軒並み死んだ ある日突然,Rails がエラーを吐くようになった。 のようだ。 bundle update をやったタイミングなのかどうか当初は分らなかったが,その日あたりからあらゆる Rails アプリが動かなくなっていった。 現象としては,app/assets/javascripts に *.coffee なファイルが一つでも入っているとエラーが出る。 ただ,「ある日突然」よりも前に *.coffee からコンパイルされて出来た JavaScript が tmp/cache に残っていて,生きている(元の *.coffee が変更されていない)限りはエラーは出ないようだった。 CentOS 上では大丈夫だった。 異常が起こったのはこんな環境: Windows 7
オブジェクトがDBに保存される前に、そのデータが正しいかどうかを検証する仕組みをバリデーションといいますが、 RailsでActiveRecordを使ってそれを実現するにあたってよく使いそうなのをまとめます。 以下のメソッドにおいてはバリデーションがトリガされます。 create create! save save! update update! 以下のメソッドにおいてはバリデーションはスキップされます。 decrement! decrement_counter increment! increment_counter toggle! touch update_all update_attribute update_column update_columns update_counters Railsでのバリデーショントリガ Railsではvalid?メソッドを実行するとバリデーションが実
Rails 4 で NOT な条件をもつ WHERE 句 が非常に書きやすくなりました。 Rails 4 なら NOT IN な SQL も簡単に書けます。 User.where.not( name: ["hoge","goro"] ) 条件にリストを渡せばよいです。SQLは以下のようになります。 SELECT "users".* FROM "users" WHERE ("users"."name" NOT IN ('hoge', 'goro')) サブクエリも使えます。これが便利すぎて困る。 query = User.select(:name) User.where.not name: query SELECT "users".* FROM "users" WHERE ("users"."name" NOT IN (SELECT name FROM "users")) Rails 3 の
私は今まで、点数がある点数以外のときというスコープを下記のように書いていました。 scope :score_is_not, ->(score) {where("score != ?", score)} いまさらですが、Rails4では、where句をnotで否定できるようです。 scope :score_is_not, ->(score) {where.not(score: score)} もちろん、通常のActiveRecordでもnotは使えます。 Test.where.not(score: 0) # Test.where("score != 0") また、INでもnotは使えるようです。 Test.where.not(score: [0, 100]) # Test.where("score NOT IN (0, 100)") 参考: #400 What's New in Rails
ActiveRecordのdupとcloneメソッドの役割が逆になっていて、 ちょっとハマった。 dupの特徴 (as new_record) idがnil new_record? == true 複製元オブジェクトの値を変更しても感知しない cloneの特徴 (not as new_record) idが複製元オブジェクトと同じ new_record? == false 複製元オブジェクトの値を変更すると値が変わる そういえばネトゲでdupeが問題になることがあったけど、 同じアイテム(同じ属性値を持ったアイテム)が別のレコードとして登録されちゃうわけだから、 本来dupの使い方はこっちが正しいのだね。 Reference ActiveRecord オブジェクトをコピーする Ruby on Rails: Up and Running: Up and Running 作者: Bruce A
探しても案外見つからなかったのでメモ。 View フォームの中で <% form_tag :action => 'send' ほげほげ<%= submit_tag _('send_now') %><%= tag :input, { "type" => "submit", "name" => "send_later", "value" => _('save') } %> send_nowのボタンの名前(name)は、commit send_laterのボタンは名前(name)は、send_later となる。 どちらのボタンを押しても、コントローラの'send'アクションが呼ばれる controller if params[:send_later] send_laterボタンを押した処理 else send_nowボタンを押した処理 end paramsに押したボタンの名前(name)の要素
Rails3時代のpaginationの標準に成り得るkaminariのインストールと設定の方法をまとめます。 Kaminariはamatsudaさんが作られたpaginationのためのgemです。 使用させていただいたところ、現在ひろく使用されているwill_paginateからこのkaminariに乗り換えてしまうのに充分な機能がある上、will_paginateと比較してシンプルなためにレンダリングのカスタマイズ等が容易に感じられました。 amatsudaさんありがとうございます。 以下、インストールからカスタマイズの方法までをまとめます。 Kaminariのインストール方法 Gemとしてインストールします。 単にgemとしてインストールするだけであれば、シェルで、 $ gem install kaminari のように入力します。 Rails 3で使用する場合は、Gemfileの
RailsでSQLを確認してみる の続き Railsで、runnerを使って、バッチ処理を作成してみる。 作成 今回はlibの下に作成する。 $ vi lib/sample.rb class Sample def self.hello puts "hello world" end end libへのパスを設定する。 $ vi config/application.rb module SampleMysql class Application < Rails::Application ・・・ config.autoload_paths += %W(#{config.root}/lib) ←追加 end end 実行すると、「hello world」が出力される。 $ rails runner Sample.hello hello world モデルの読み込み Userモデルの検索結果を出力す
require "charwidth" Charwidth.normalize("Hello, World!") # => "Hello, World!" Charwidth.normalize!("Hello, World!") # 破壊的に変換 Charwidth.normalize("「ハローワールド」") # => "「ハローワールド」" require "charwidth/string" "Hello, World!".normalize_charwidth # => "Hello, World!" "Hello, World!".normalize_charwidth! # => 破壊的に変換 "「ハローワールド」".normalize_charwidth # => "「ハローワールド」"
turbolinks について Rails 4 から turbolinks という機能がデフォルトで bundle されるようになった。 http://kray.jp/blog/must-know-about-turbolinks/ ページ遷移をすべて ajax でやってくれるが、割りとおせっかい機能。 しかも jQuery と競合するから jquery-turbolinks を gem で入れることで回避するとかやめてほしい。 こういう機能はぜひともプラグインで提供していただきたい。 turbolinks を切る さっそく turbolinks をオフにする。 Rails project 新規作成 turbolinks が bundler で最初に install されてしまうので、一旦 --skip-bundle をつけて skip
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く