旅好きエンジニアのメモ

旅のこと映画、統計、会計、プログラミングなど、気の向くままに語ります

djnagoのORMでinを書く方法

例えば為替のレートを検索するときで
ユーロとオーストラリア・ドルだけ抽出したいときは以下のように書きます。

ExchangeRate.objects.all().values().filter(currency_code__in=["EUR","AUD"])

filterのなかで"__in="を書いて、その中でリスト型で書くだけですね。

Rspecのstub(スタブ)を使ってみる

Rspecのstub(スタブ)を使ってみる

rubyにかぎらずテストを書いていたら、どうしてもここの処理はこの値が返ってきてほしいところとかありますよね。(テストを行うために恣意的に値を返したい)
そんなときはstub(スタブ)を使いましょう。
自分はwebスクレイピングとかのテストのとき使っていました。(なかなかテストが難しいですからね)

stub(スタブ)とは

あるオブジェクトのメソッドが呼ばれたら、指定した戻り値を返すものです。

書き方

# allow(object).to receive(method).and_return(return value)
allow(job).to receive(:webscraping).and_return("返したい値")

#恣意的に特定の値をテストのために返したいメソッド
def webscraping(url)
open(url) { |f| Nokogiri::HTML.parse(f.read, nil) }
end


(注)これでテストは書けますが 以下のようにテストの回答と一致させても意味は無いのであくまでどうしても処理の途中で呼ぶ出すメソッドとかに使ってください。
expect(job.webscraping).to eq "何かの値"

pythonでオブジェクトの中身を知りたい時

pythonでオブジェクトの中身を知りたい時

pythonってrubyに比べて便利なメソッドとか無かったりするんですよね。

特に最近思ったのはオブジェクトの中身を確認する方法。

rubyだと便利なのは一杯あるんですよね。

 

qiita.com

 

個人的にpythonだと

dir("調べたいもの")

一択ですね。

 

以下のような方法もありますがなにせ長いので使いにくいですw

print type(obj)
for x in inspect.getmembers(obj, inspect.ismethod):
  print x[0]

Djangoを使っていてドメインだけのルーティングをセッティングしたい場合

Djangoを使っていてドメインだけのルーティングをセッティングしたい場合

 

r'^$'を書けばドメインだけのルーティングができます。

url(r'^$', "ルーティングする場所", name='  '),

Djangoでデータ登録しようとした時character with byte sequence 0xe3 0x83 0x95 in encoding "UTF8" has no equivalent in encoding "LATIN1"なエラーが出ちゃった時

Djangoで日本語のデータを登録しようとした時、以下のようなエラーが出ました。

character with byte sequence 0xe3 0x83 0x95 in encoding "UTF8" has no equivalent in encoding "LATIN1"

 

これは自分がPostgreSQL使っていて起きた問題です。
PostgreSQLに原因があります。

まぁ、簡単に言うと現在使っている文字のエンコードが違うよーってはなし。
なのでDBを作成するときはエンコードをUTF8で作成しましょう。

PostgreSQLでencordingを変更を変えてDBを作成しようとしたけど"createdb: database creation failed: ERROR: encoding EUC_JP does not match locale en_US.UTF-8"なエラーが出ちゃった時

createdb -T template0 -E EUC_JP --locale=C dbname
なふうに書いてやれば出来ました。

参考

名称未設定 : Ubuntu12.04LTSのPostgreSQLでEUC_JPのデータベースを作る

railsのsaveとsave!の違い (active record)

railsを使っていてDBに登録するときに
saveを使っているでしょうか?
それとも
save!を使っているでしょうか?

この違いって結構大きいんですよね。
ですので使い分けを推奨します。

ではどのように使い分けるかというと、データを新しく取り込むときに
取り込めなかったときにエラーにするかしないかを選ぶということです。

・saveは、保存できない場合 false。
・save!は、保存できない場合 例外ActiveRecord::RecordInvalid

何か取り込めなかったときにログとか残しておきたかったらsave!とかのほうがいいかもしれません。
特にログは残さないし、true falseの判断だけでいいやってかたはsaveでいいかもしれません。