Rails

緯度経度から距離を計算するgeokit-railsの使い方

こんばんわ。 地図を移動移動した時にするサーバとの通信を、ActionController::Liveでやろうと考えましたがIEが非対応だったのでクソがとなりました。 環境 rails 4.0.2 geokit-rails (2.0.1)https://github.com/geokit/geokit-rails geokit-railsは、緯度…

becomes と 単一継承テーブル

単一継承テーブルしてる複数のモデルで、同一のformを使うとするとActiveRecord::Persistence#becomesメソッドを使うと思う。 このbecomesメソッドはコントローラーで使ったほうがいいよという話。今までの自分はform_forメソッドの引数へ直接becomesを書い…

capistrano3使ってみた

3へのだいたいの変更点 setメソッドで定義した値を読むには、fetchメソッドを使う capistrano-extがデフォでサポート 自作タスクの構文がかわった 今までdeploy:migeationsと実行していたmigrationタスクは、 cap production deployで一緒に実行されるように…

プレビュー機能つける

Rails4 リソースを登録する前にプレビューしたい! View _form.html.eb プレビュー用submitには、name属性にpreviewを表す文字を割り当てる。 ... <div class="control-group"> <%= f.label :body, '本文', class: 'control-label' %> <div class="controls"> <%= f.text_area :body, class: 'span9', size: "0</div></div>…

migrateでコケた原因はPostgresqlでリストアでエラーになってたからだった

$ psql -U postgres -d prpr-antena_development < dump . . . ERROR: cannot drop schema public because other objects depend on it DETAIL: table regions depends on schema public table prefectures depends on schema public HINT: Use DROP ... CAS…

showアクションを文字列で

rails3普通のRailsアプリなら数字でリクエストを送るけど文字列で送りたい。RedmineのProjectsController#showで同じことやっていたので、ソースを追うとfindメソッドを上書きしてた。 # app/models/project.rb def self.find(*args) if args.first && args.…

ポリモーフィックなカラムのセレクトボックスを作る

rails4 ポリモーフィック(polymorphic)関連とは UserモデルとPostモデルの両方にPhotoモデルを関連つけたい。 ユーザと記事は画像を持てる。みたいな時に このポリモーフィック関連を使うといい感じに実装できる。(~ableにするのが慣習っぽい。)使うには、Ph…

Model.newの時に初期値を設定する その2

前の記事でinitializeメソッドのオーバーライドしていたけど、 Activerecordのdoc見るとafter_initializeというコードバックがあるみたいだったのでこっち使った方がよさそう。 直接あなたのアクティブレコードinitializeメソッドをオーバーライドする必要性…

Model.newの時に初期値を設定する

railsl4createアクションでもnewしているのでnilの場合だけ設定してる。 class Item < ActiveRecord::Base def initialize(*args, &block) super self.start_on = DateTime.now.to_date if self.start_on.nil? self.end_on = DateTime.now.to_date + 1.week …

act_as_listで別リストにする項目を文字列で

acts_as_list (0.2.0) acts_as_list scope: :slugとすると、slug_idでグルーピングされる。 こうすればいい acts_as_list scope: %q!slug = '#{self.slug}'! 参考 http://d.hatena.ne.jp/hichiriki/touch/20100212/1265980728

文字数で文字の切り捨て

文字の切り捨てする時にRailsだとtruncateというヘルパーがあるのでそれでできるけどパターンによってはすごくいまいち。 helper.truncate("123456789", :length => 8) # => "12345..." helper.truncate("12345678", :length => 8) # => "12345678" truncate…

GETリクエスト投げて結果を表示するWEBアプリ作ってみた

デモ https://watch-cat-demo.herokuapp.com/ 使ってる技術 Rails4 できること 一覧でサービスの状態がわかる 稼働ホストでグループピングできる なぜ作ったか 会社で運営しているサイトのステージングが多くなっていて、 生きているかの確認を手でするのが…

1人で考えてたら行き着いたRspecの書き方とか その1

rspec-core (2.13.1) ruby2.0Rspecってすごく個性でると思うので複数人で開発する時は規約を設けないとだめかも。 letメソッド使う let(:word) { FactoryGirl.create(:word) } メモ化っていうらしい。 letの引数に書いているシンボル名を試験内で呼ぶとロー…

Jpmobileで作ったスマホサイトをスマホから見た時、PCビューを表示するリンクを作る

jpmobile (4.0.0) rails (4.0.0) ruby2.0 作るもの スマホからスマホ対応サイトにアクセスした時に、『PC版を表示する』というリンクがあって、 それをクリックするとスマホからPC版を閲覧ができる機能を作ってみる。 ロジック 特定のクッキーをもっていれば…

テストの時にスタブで標準出力を黙らせる

メソッド内にインジゲータ感覚で標準出力になんらかの文字を出力しているのって結構あると思う。 でもテストを実行すると実行結果に、そのインジゲータの文字が出力されるのがすごください。 その悩み、スタブで解決。 $stdout.stub(:puts).and_return(nil) …

rspecで遅いテストを表示する

$ rake spec --profile 20上位20件が表示される。 Top 20 slowest examples (93.93 seconds, 36.6% of total time): Admin::Categories POST create 子カテゴリとして作成する時 work! 13.09 seconds ./spec/requests/admin/categories_spec.rb:127 Admin::C…

view specつらい

(ぺろぺろあんてな、スマホサイトを公開しました。)viewのテストはcapybaraで済ませていたのだけど大きな問題が発覚。 テストが遅い。 スロースペックを見てみると、request specが上位独占。裏でブラウザが起動してぽちぽちやっているのでまあ無理もないっ…

controller_specでCanCan::AccessDeniedが発生しない件について

rails4.0 cancan (1.6.10) sorcery (0.8.1)ブラウザでは例外が発生するのに、 class Admin::BaseController < ApplicationController rescue_from CanCan::AccessDenied do |exception| # controller_specでなぜかとおらない render text: "権限がありません…

指定したspecファイルを実行する

rspec-rails (2.13.2) rspec-core (2.13.1) rake (10.1.0) 指定したspecファイルを実行する $ rake spec SPEC=spec/controllers/home_controller_spec.rb 指定した複数のspecファイルを実行する $ rake spec SPEC="spec/controllers/home_controller_spec.rb…

Chossing Message

会社の先輩から『Smalltalkベストプラクティスパターン』って本を借りたのでおっ(^ω^)と思ったパターンをメモっていく。 Chossing Message さまざまな選択肢のうちのひとつを実行させるにはどうしますか?Rubyで書くとこういうケースのことだと思う。 clas…

ある条件の時だけモデルの検証をしたい

Rails4ある条件の時だけモデルの検証をしたい時といえば、 ユーザ情報更新する入力画面でパスワードの検証は毎回したくない。 でもパスワードの変更がある時だけパスワード系項目の検証をしたい。とかそういう時だと思う。 update(create)の時だけ検証する o…

Threadを使う

RailsでThread使う機会がないと思っていたけどあった。controllerで複数のサーバへGetリクエストを送信する、という処理を書きたかった。 そのまま書けば、レスポンスが帰ってこないと次のリクエストを投げれないのでとてもパフォーマンスが悪い。 それでThr…

herokuのpostgresDBをdropする

とてもdropしたい。 2011年時点は、migrationを戻してる記事をよくみたけど今はそれ使えなかった。現時点でdropするには、 pgコマンドでDBのURLを調べて、そのURLをresetコマンドでリセットする。という手順を踏まないといけないみたい。 $ heroku pg === HE…

ActiveRecord#joinsメソッド覚えました

Rails4joinsメソッドを最近覚えました。 ActiveRecord#joinsとは、複数のテーブルを結合するメソッドです。 テーブルを跨いでレコードの抽出をしたい時に使います。whereでin句を使えば、テーブル結合しなくても同じ結果が得られるのですがコードが冗長にな…

ご意見送信フォーム設置しました

Rails4最近腱鞘炎がひどいくて湿布を手放せません。歌丸です。http://prpr-antena.com のページフッターにご意見送信フォームを作りました。 レスポンスが遅いなど配色がださいなど送って頂きたく。以下、今回の実装で書いたコードです。 ご意見フォームを作…

RSSフィードを配信する

Rails4アンテナサイトというのは、RSSで取得した記事をRSSで配信するものらしい。 まとめサイトのおすすめ記事一覧にここRSSフィードを配信して貰えばアクセスアップが見込めそう。とういうことで実装してみた。 posts_controller.rb def index @posts = Pos…

ActiveRecordで動的なAND検索する

Rails4最近Rails系の記事はgemを減らせというのをよく見るような気がしています。 Railsのバージョンアップに足を引っ張ったり、起動が遅くなる原因だそうです。さて、ActiveRecordでAND検索です。 アプリの規模が小さいのであれば出番が多いのではと思いま…

A template needs to have a virtual path in order to be refreshed

Rails 4.0.0.rc1データベースに入れたerbを解釈して欲しい時は <%= render :inline => block.body %> のようにすればよい。でもnilが入っていると、 A template needs to have a virtual path in order to be refreshedと出る。 わっかりにくいエラー。

モデルの中からcurrent_userを見たい

ぐぐると解決できそうな記事が多いけど、それぞれ微妙に実現方法が違う。ぱっと見、行数少なくていいなと思ったのはactive_scaffoldを使うやつ。 http://kingyo-bachi.blogspot.jp/2012/09/activescaffold.html でもActiveScaffoldがRails4対応してなかった…

sorceryのブルートフォースアタック対策モジュールを使ってみた

Rails 4.0.0.rc1 sorcery (0.8.1) はじめに ブルートフォースアタックとは、手当たり次第パスワードの入力を試みる攻撃方法。こわいです。 (http://ja.wikipedia.org/wiki/総当たり攻撃) sorceryとは シンプル認証ライブラリ。 コア以外の機能は、サブモジュ…