2014年9月29日月曜日

Rails4で複数モデルのトランザクションについて調べてみた

仕事で最近rais4を使って開発してるんだけど、トランサクションについてわからんのでちょっと調べてみた。


必要な仕様としては、インサートする配列があって、どこかでインサートがこけたらrollbackして成功していたインサートもなかったことにする。


自分これ系の仕様嫌いなんだけど。。。
しょうがないからやってみた。


まず、バルクインサートさせるために「activerecord-import」を使う。
Gemfileに下記を記述して
gem 'activerecord-import'

bundle update


で、mysqlでテーブル3つ用意。
foodsテーブル
order integer not null
name  string

jobsテーブル
order integer not null
name  string


likeテーブル
order integer not null
name  string


どれも構成はおんなじ。
ネーミングセンスはテストなので気にしないでちょ(汗)
データはあらかじめ入れておくよ。


簡潔にテストしたいのでスタティックなコントローラに下記を記述。
orderはnot nullなのでorderのところに「nil」を入れておいて、わざとエラーにさせる。


コントローラに書くコードは下記のコード。

p '------------------------'
ng=[
  { :order => 10, :name => 'ああああ'},
  { :order => 11, :name => 'えええ'},
  { :order => nil, :name => 'いいい'},
  { :order => 13, :name => 'ううう'},
  { :order => 14, :name => 'おおお'},
]

ok=[
  { :order => 10, :name => 'ああああ'},
  { :order => 11, :name => 'えええ'},
  { :order => 12, :name => 'いいい'},
  { :order => 13, :name => 'ううう'},
  { :order => 14, :name => 'おおお'},
]

j = []
ng.each do |i|
   j << Job.new(i)
end

f = []
ok.each do |i|
   f << Food.new(i)
end

begin
  Job.transaction do
    Food.import f
    Job.import j
   
    a = Like.where(Like.arel_table[:order].lteq(10))
    a.update_all({:name => 'きゃー'})
  end
rescue ex
  p '----------- error -------'
  p ex.messages
end

どっかの記事でRails(4)は複数のトランザクションをサポートしない。。。
みたいな記事を見たんだけど、構わず無作為にピックアップしたモデルを使ってトランザクションしてみる。


実行してみた結果、クエリがこけたときは見事rollbackされることが確認できた。
どのテーブルも更新されませんでした。
念のため、Food, Job, Likeでそれぞれこけさせてみたが、結果は同じ更新されてませんでした。
もちろん、成功時は三つのテーブルに更新がかかっているのも確認ができた。


モデル.transaction doで複数のモデルの更新管理ができることはわかったけど、Rails自身がバージョンアップしたら動かなくなる可能性もあるので注意かも?

2014年9月27日土曜日

理解不明アニメ、グラスリップの4大不明点を考える

昨日、やっとグラスリップの最終回を見ました。
感想としては、他でも騒がれているとおり、理解不能だった!
グラスリップの難解度は、メカクシティーアクターズを超えたんではなかろうか?


まぁ、グラスリップの方がキャラとか背景を眺めているだけでも楽しめるので、メカクシティーアクターズよりは良い作品なのかも。。。


とにかく何が分からないかと言うと

1)トーコの未来が見える能力

何で未来が見えるのか?どんな未来なのか?
ストーリーの中で明かされていたかもしれないが、まったく自分の記憶の中にございません(笑)
ご存知の方がいらしゃいましたら、コメントください!


2)トーコが作ったビー玉を山でばらまく

そもそも、ビー玉ばらまいた意味が分からない。

曇りで見えない流星群の代わりにビー玉をばらまいて流星群にしたのか?
もはや、人の業でないぞ!
トーコとかける君は何者だ?
グラスリップって普通の人の話じゃなかったのか(汗)


3)かける君が近々いなくなる

これは、どういうことなんでしょうか?
文字づらだけだと怪談に聞こえてしまうが。。。

海外に留学するのでしょうか?
海外留学なら今どきそんな騒がないでしょうよ

かける君、病気でもなさそうだし事故にでもあうのか?
最後は、かける君のテントがなくなっていましたが。。。


4)トーコの友達たちは、トーコとかける君の状況を知っている?

最終話でのトーコの友達、やなぎとかける君の会話を見ているとやなぎはトーコとかける君の状況を知っているようだ。

普通、状況を知らない登場人物たちが迷走しているところを視聴者は見るものだが、グラスリップでは登場人物たちは状況を知っていて、視聴者側が何が起きているのかわからず、慌てる逆パターン。
斬新だぁ~(笑)

結論

結局、グラスリップって全話見ても明らかになっていない部分の答えを教えないで、その不明な部分を視聴者がそれぞれ妄想して楽しむアニメなのではなかろうか?

2014年9月13日土曜日

30歳を過ぎた小栗旬が高校生を演じる信長協奏曲が楽しみ

深夜にフジテレビで放送されているアニメ、信長協奏曲を何気に見ているんだが、
結構、ハマってみてます(笑)


まぁ、話的には高校生のサブローが戦国時代にタイムスリップしてしまい
夜逃げの最中の織田信長に出会ってしまい入れ替わり、信長イベントをこなしていく話。


信長のシェフといいタイムスリップ多いですね!


キャラが微妙な感じもしますが、戦国時代とか幕末の話が好きなのでオモシロいと感じてます。
どうでもいい話ですが、軍師官兵衛も毎週欠かさず見てます。


ネット上ではあまりアニメが話題になっていない信長協奏曲ですが、
秋に月9でドラマをやるそうで、その時間に時代劇やるの珍しいです。


月9も、ネタが尽きたんでしょうね、そりゃ恋愛ものばかりじゃ。。。
極悪がんぼなんてのもありましたが(結構、面白かったです)。


で、サブロー役が、実写ルパン三世で話題になった小栗旬さん。
漫画の主人公の役が続いていますね。


小栗さん自身、漫画が大好きだと聞いたことがあるけど、
それが、役のひきにつながっているのか?


まぁ、ルパンの仕上がりはかなり良かったので、今回の信長協奏曲でも
安定の仕上がりに違いない!


30歳を過ぎている小栗旬さんですが、まさかの高校生の役とは。。。
まぁ、若く見えるしそんな違和感もなく見れると思うので
とりあえず録画予約でもしとくかな。


さすがに夜9時だと、毎週は見れなさそうなので。。。