悪徳商法?マニアックス ココログ支店

悪徳商法総合情報紹介ページ ~騙すなら、素敵にだまして~  本家「悪徳商法?マニアックス」は、こちら

2016.03.19

Rails で確認画面を作る方法<Perfect Edition>

Ruby on Rails で、フォーム入力に確認画面を出す方法です。
以前書いた方法だと、inherited resources gem で動かないので、アップデートしました。ちゃんと「戻る」ボタンもあります。
Rails 4.2.6 にて確認。

まずは、入力するリソースを作成。

rails g scaffold article title

モデルに、確認画面用のattributes を追加します。

コントローラのstrong parameter で、許可します。良くこれを忘れて「動かない!」となるので、ご注意を。

フォームのview を以下のように書き換えます。ポイントは、inherited resources の validation は、errors をチェックしているため、表示の直前に確認画面用の error を取り除くことです。

参考:
非標準RESTful actionを禁止する
変なconfirm アクションとかを作られるのを、テストで禁止する方法

2016 03 19 [ruby on rails] | 固定リンク | コメント (1)

2015.12.25

[rails] 自動で、mysql文字列のvalidationを行う方法

rails で、カラムにlimit より長い文字列を入れようとすると、エラーが出て面倒です。

きちんとvalidation を定義すべきなのですが、それも面倒なので、カラム情報から自動的に定義するconcernsを作りました。postgreSQL は使わないので、postgreSQL も自動化できるのかどうかは分かりません。rails 4.2.4 で確認しました。

使用方法:

2015 12 25 [ruby on rails] | 固定リンク | コメント (0)

2015.05.25

[rails] 非標準RESTful actionを禁止する

railsで、contollerに index, show, new, create, edit, update, destroy(the Golden 7 actions)以外の actionを追加して許されるのは、rails暦1週間未満の素人か、rails暦10年以上のベテランrailer だけです。よって、普通の人は非標準 action を追加する必要は無いので、それを禁止する spec を書いてみました。これで、プルリクエストの度にコメントしたり、xxx_params とか set_xxxx とかを間違って action にしてしまうことを防げます。

実行例:

確認した環境:
rails 4.2.1
rspec 3.2.1

2015 05 25 [ruby on rails] | 固定リンク | コメント (4)

2015.05.17

[rails] routes に無い controller action のテストをする方法

routes.rb に、きちんと resources :post, only: [:index, :show] のように書いていくと、controller specで「アクションが呼び出せないこと」というテストがやりにくくなってしまう。具体的には、routesに定義されていないアクションを呼び出すと、No route matches と言われてしまう。

そこで、controllerとroutes の責務を分離するためには、テストの時だけrails2の頃に使っていた「何にでもマッチするroutes(legacy wild controller route)」を定義すれば良い。

inherited resources gem とかを使っていると、余計なアクションが継承されている場合があるので、テストすることをお勧めします。

確認した環境:
rails 4.2.1
rspec 3.2.1

2015 05 17 [ruby on rails] | 固定リンク | コメント (1)

2015.01.11

breadcrumbs_on_railsで、bootstrap用のviewを出力する

基本的には、以下のページの通り。ただ、BootstrapBreadcrumbsBuilderで、compute_name、compute_pathを再定義しているのは、viewからprotectedメソッドを呼べないからなので、public にしなおせばよい。

Ruby on RailsとTwitter Bootstrap 3でパンくずリストを追加する方法


2015 01 11 [ruby on rails] | 固定リンク | コメント (0)

2013.09.11

[rails] 複数のbelongs_toを一度に設定する

モデルのassociationを使ってcreateすると、belongs_toも自動的に設定されます。しかし、3者間関係のように複数のbelongs_toがある場合、それらを自動的に設定するためには一工夫必要になります。

書籍(book)が、会社に所属する著者(author)と会社(company)に所有されている場合で考えて見ます。そのままcreateすると、bookのcompany_id はnil になります。

普通の解決法は、bookのcreate時にcompanyを明示的に指定する方法です。

ちょっと気の利いた解決法としては、associationを使ってbuildしたものを、concatする方法があります。

has_manyに条件を設定することで、railsがbelongs_toの関係を知ることが出来、一度に設定できるようになります。has_many :through の時にも使えます。

ruby2.0.0 + rails4.0.0 で確認しました。

2013 09 11 [ruby on rails] | 固定リンク | コメント (0)

2013.06.01

AWS(EC2)で、rspecのベンチマーク

jenkins氏をEC2のsmallインスタンスで動かしていると、テストの実行とかが大変遅くてCI がはかどらない。スペックをあげると、どのくらいの費用対効果があるのか知りたかったので簡単に計測してみた。

計測に使用するspecは、こんな感じ。結果は、time rspec を実行した時の実行時間。

4918 examples, 0 failures, 52 pending

・環境
rails 3.2.13、ubuntu12.04、postgres 9.1(apt-getで入れただけ最適化は無し)、GC環境変数・preloadなどの設定無し

■m1.small
real 25m19.076s
user 22m11.195s
sys 0m20.297s

■m2.xlarge
real 10m23.233s
user 10m3.638s
sys 0m8.505s

■m2.xlarge + iops1000
real 11m19.363s
user 10m57.197s
sys 0m7.736s

ローカルの開発環境で試した限りでは、SSDで確実に速くなるんですが、iops1000くらいだと効果が無いみたい。standardは、EBSの性能バーストがあるからか?

今度、sakuraのSSD VPSで試してみよう。

2013 06 01 [ruby on rails] | 固定リンク | コメント (0)

2013.04.25

Railsで、FactoryGirlの全factoryを自動でテストする

テストを書いていて、FactoryGirl.create :userが失敗したりすると、やる気レスになりますよね?
というわけで、全てのfactoryがvalidationを通るかどうかテストするspecです。
errors.to_a をチェックしているのは、エラーの原因をrspecで見やすくするためです。


2013 04 25 [ruby on rails] | 固定リンク | コメント (0)

2013.04.04

railsで、モデルの全関連をテストする

foreign_key とか設定を忘れることがあるので、関連についてもテストしておきたい。でも、一々書くのは面倒なので、まとめてテストする方法を試してみました。もちろん、TDDとか仕様的なものを書きたい時は、自分で書かないとだめです。
rails 3.2.13。要rspec、shoulda-matchers。


2013 04 04 [ruby on rails] | 固定リンク | コメント (0)

2013.03.31

2ちゃんねるのトリップ生成用gemを公開しました

ruby用のライブラリがありそうで見つけられなかったので、gemを作りました。

https://github.com/beyond/digest-trip

2013 03 31 [ruby on rails] | 固定リンク | コメント (0) | トラックバック

2012.08.29

railsで、モデルのattributeを変更禁止にする

ruby on rails3.2.8で試しました。
railsを使っていて、モデルのattributeがnilの時には代入を行いたいけど、その後の代入は禁止したいことって、ありませんか?どうやって実現すればよいのか分からなかったので、custom validatorを書いてみました。
他に良いアイデアがあったら、教えてください。

サンプルです。


2012 08 29 [ruby on rails] | 固定リンク | コメント (1) | トラックバック

2011.08.29

rails で、オブジェクトserializeをMessagePackで行う

ActiveRecord の serialize は便利だけど、YAMLを使ってシリアライズしているので、速度とサイズが気になる。と言うわけで、無理やりMessagePackを使うようにしてみた。

やり方としては、unserializable_attribute?、object_from_yaml、arel_attributes_values をオーバーライドすればOK。

■ベンチマーク
to_msgpack と、MessagePack.unpack を1000回繰り返す
0.000000 0.000000 0.000000 ( 0.002945)

to_yaml と、YAML.load を1000回
0.260000 0.330000 0.590000 ( 0.600541)

PackedEntry.create と、PackedEntry.last を1000回
1.050000 0.200000 1.250000 ( 2.345843)

Entry.create と、Entry.last を1000回
1.160000 0.780000 1.940000 ( 3.084537)

VM上でベンチマークを取ったので差が出なかったけど、DBが速ければ速いほど、上2つの速度差に近くなるはず。

■使い方


rails g model PackedEntry body:binary


2011 08 29 [ruby on rails] | 固定リンク | コメント (8) | トラックバック

2011.05.29

rails で確認画面を実装する

新しく記事を書きました(2016/03/19)。こちらを、参考にしてください。
Rails で確認画面を作る<Perfect Edition>

confirm アクションが許されるのは小学生までだよねーってことで、私が良く使う方法。rails3.0.7 で確認。

rails g scaffold article title:string

models/article.rb を以下のように書き換え。

views/articles/_form.html.erb を以下のように書き換えて実行。controller や、routes を書き換える必要は無し。これで、確認画面の時のvalidation とかもちゃんと動く。

(追記)
confirming に無理やり値を入れられた場合は「確認したくない」という意思表示とみなして、確認画面をスキップします。confirming のhidden を、チェックボックスにする実装もありでしょう。

2011 05 29 [ruby on rails] | 固定リンク | コメント (3) | トラックバック

2011.03.28

restful_authenticationのデータを、deviseで使う

以下の記事を参考にして、データを移行。

リンク: How To: Migrate from restful_authentication to Devise - GitHub.

config/initializers/site_keys.rb をコピーしてくる。モデルの設定は、以下のとおり。
config/initializers/devise.rbを修正する必要は無い。

class User < ActiveRecord::Base
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable,
         :confirmable, 
         :encryptor => :restful_authentication_sha1,
         :stretches => REST_AUTH_DIGEST_STRETCHES,
         :pepper => REST_AUTH_SITE_KEY
end

2011 03 28 [ruby on rails] | 固定リンク | コメント (0) | トラックバック