Hatena::Grouprubyist

Rubyを勉強しようと思ってはじめた日記

2008-06-28

SQLで検索する(1)

| 00:32 | SQLで検索する(1) - Rubyを勉強しようと思ってはじめた日記 を含むブックマーク はてなブックマーク - SQLで検索する(1) - Rubyを勉強しようと思ってはじめた日記 SQLで検索する(1) - Rubyを勉強しようと思ってはじめた日記 のブックマークコメント

SQLで条件にあったカラムが欲しい場合に、LIKEというのがあるそうで。以前から聞いて知ってはいたんですが、試していなかったので、試してみました。

select * from memos WHERE title LIKE '%PHP%' OR message LIKE '%PHP%';

その結果。

+----+----------------+-------+---------------------+---------------------+------------+-----------------+
| id | title          | money | create_date         | modified_date       | money_type | message         |
+----+----------------+-------+---------------------+---------------------+------------+-----------------+
| 15 | PHP title test |  NULL | 2008-06-27 06:12:54 | 0000-00-00 00:00:00 |       NULL | NULL            | 
| 21 | PHP title test | 10000 | 2008-06-28 20:22:57 | 2008-06-28 20:22:57 |          3 | PHP HOGE        | 
| 20 | PHP title test | 10000 | 2008-06-28 20:12:37 | 2008-06-28 20:12:37 |          3 | Ruby            | 
| 18 | PHP title test | 10000 | 2008-06-27 06:24:38 | 0000-00-00 00:00:00 |          3 | テストだよ      | 
| 19 | PHP title test | 10000 | 2008-06-27 06:25:56 | 2008-06-27 06:25:56 |          3 | テストだよ      | 
| 22 | Title test     | 10000 | 2008-06-28 20:23:42 | 2008-06-28 20:23:42 |          3 | PHP HOGE        | 
| 23 | Title test     | 10000 | 2008-06-28 23:43:22 | 2008-06-28 23:43:22 |          3 | PHP HOGE        | 
+----+----------------+-------+---------------------+---------------------+------------+-----------------+

2008-06-25gemのインストールさえ出来たら

gemのインストールさえ出来たら

| 02:11 | gemのインストールさえ出来たら - Rubyを勉強しようと思ってはじめた日記 を含むブックマーク はてなブックマーク - gemのインストールさえ出来たら - Rubyを勉強しようと思ってはじめた日記 gemのインストールさえ出来たら - Rubyを勉強しようと思ってはじめた日記 のブックマークコメント

またドタバタしていました。とりあえず、歩いていど動くし、情報を入れてみようと思いました。そこで、さくらインターネットに設置して...あれ?Activerecordを入れていないじゃないか!ということでインストール方法を調べて試してみるも失敗。gemのインストールさえ出来たら、動きそうなのに...。

参考

2008-06-18

Activerecordについて(3)ActiveRecordの魅力

| 00:18 | Activerecordについて(3)ActiveRecordの魅力 - Rubyを勉強しようと思ってはじめた日記 を含むブックマーク はてなブックマーク - Activerecordについて(3)ActiveRecordの魅力 - Rubyを勉強しようと思ってはじめた日記 Activerecordについて(3)ActiveRecordの魅力 - Rubyを勉強しようと思ってはじめた日記 のブックマークコメント

Activerecordは、デザインパターンの1つらしい。うすうすわかっていたけれど、改めて書いておく。

RubyActiveRecordを実際に使ってみて

  • データへのアクセスとロジックが同じクラスにかける(というか、書くのがActive Recordパターン?)
  • 1テーブル = 1クラス
    • クラスを作るのがすごく簡単
    • そしてわかりやすい
    • DB(というかテーブル)へのget、setをメソッドで提供している
  • Ruby on Railsに使われているためか、知っていると楽に出来る箇所が多そう
    • 日付について処理を適切に勝手にしてくれたりとか
    • でも、知らないと何が起きているのかわからない

という感じでした。


Ruby on Railsの生産効率がいいよ、と言われるようになった理由のいくつかは、ActiveRecordにあるのでしょう。

でも、知っていると効率が上がりますが、知らないと何か得体の知れないもが動いている感じをもってしまいます。

便利だけれど、副作用もあるんだな、ということがわかりました。


なれるのにちょっと時間が必要だけれど、覚えてしまうと一気に加速できるのがActiveRecordRuby on Rails)の魅力なんでしょうね。

2008-06-15

色々やってみた

| 23:02 | 色々やってみた - Rubyを勉強しようと思ってはじめた日記 を含むブックマーク はてなブックマーク - 色々やってみた - Rubyを勉強しようと思ってはじめた日記 色々やってみた - Rubyを勉強しようと思ってはじめた日記 のブックマークコメント

土日にまとめていろいろやれる時間がありました。

なので、SQLを覚えたり、Rubyを書いてみたりできました。

timeオブジェクト

Time.nowから形式を変換する方法を実際に試そうとしたら、まったく覚えていなくてびっくりした。

ここらへんは、自分で自由に拡張してもいいかもしれない。

Time.now.strftime('%Y年%m月%d日')    # 日付表示用
Time.now.strftime('%Y-%m-%d %H:%m:%s')    # SQL用

Hashのキーの存在を調べる

key?なんていうメソッドがあるとは思わなかった。key()でキーが返ってくると思っていたけれど、「?」がつくメソッドがあるとは思わず...。

hash.key?('調べるキーの名前')

ERBのテンプレートファイル

わかったこととしてこんな感じ

  • メソッドはそのまま使える
  • 文字コードの変換も可能

ということは、テンプレートがメソッドだらけになっていたりします。

これだとテンプレートというかviewは、これでいいのか?と考えてしまう

2008-06-14

MySQLのtimestamp

| 03:01 | MySQLのtimestamp - Rubyを勉強しようと思ってはじめた日記 を含むブックマーク はてなブックマーク - MySQLのtimestamp - Rubyを勉強しようと思ってはじめた日記 MySQLのtimestamp - Rubyを勉強しようと思ってはじめた日記 のブックマークコメント

なんだか自動的に値が入るなあ、と思ったら、そいうものらしい(本当に?)

確かに便利なんだけれど、MySQL依存になってしまうわけですね。

きちんと値を取得して入れるようにしておいたほうがいいかも。

MySQLのtimestamp

文字コードの変換

| 02:51 | 文字コードの変換 - Rubyを勉強しようと思ってはじめた日記 を含むブックマーク はてなブックマーク - 文字コードの変換 - Rubyを勉強しようと思ってはじめた日記 文字コードの変換 - Rubyを勉強しようと思ってはじめた日記 のブックマークコメント

文字コードの変換がわからず調べると、るびまにしっかり書いてありました。

「るびま」すばらしい。

文字コードの変換について

Activerecordについて(2)typeというカラム名

| 02:44 | Activerecordについて(2)typeというカラム名 - Rubyを勉強しようと思ってはじめた日記 を含むブックマーク はてなブックマーク - Activerecordについて(2)typeというカラム名 - Rubyを勉強しようと思ってはじめた日記 Activerecordについて(2)typeというカラム名 - Rubyを勉強しようと思ってはじめた日記 のブックマークコメント

Activerecordを使っていてよくわからないエラーが出るなあ、と思っていました。

でも、私の使い方が悪いんだろう、と。

わかったのは、Activerecordtypeというカラム名はどうもエラーが出るみたいです。予約語なのかな。

同じ

yyamasakyyamasak2008/06/18 01:31ActiveRecordには Magic Field Name もしくはマジックカラムとか呼ばれてるものがあって、タイムスタンプのカラムに特別な名前をつけるとMySQL以外でも勝手に値が入ります。

http://wiki.rubyonrails.org/rails/pages/MagicFieldNames

d4-1977d4-19772008/06/18 20:03yyamasakさん、ありがとうございます!
「Magic Field Name」って本当に魔法すぎて、ビビリました。

NadaNada2012/08/06 18:45Reading this makes my decisions easier than tainkg candy from a baby.

rqwicatdqbrqwicatdqb2012/08/07 11:50BI9M6N <a href="http://dixhoagiqscy.com/">dixhoagiqscy</a>

qosdawyrofqosdawyrof2012/08/07 17:01eArSye , [url=http://vtioppqyuowu.com/]vtioppqyuowu[/url], [link=http://kgwylmvnsocr.com/]kgwylmvnsocr[/link], http://siplgflaecmk.com/

llihtipvqdyllihtipvqdy2012/08/08 23:10i6V8No <a href="http://cfsvpngqpuzi.com/">cfsvpngqpuzi</a>

eqnrvxqveqnrvxqv2012/08/09 11:56ECvLn2 , [url=http://khrgmvjfanmy.com/]khrgmvjfanmy[/url], [link=http://godtlusqwjze.com/]godtlusqwjze[/link], http://nodncrvvirrr.com/

eqnrvxqveqnrvxqv2012/08/09 11:56ECvLn2 , [url=http://khrgmvjfanmy.com/]khrgmvjfanmy[/url], [link=http://godtlusqwjze.com/]godtlusqwjze[/link], http://nodncrvvirrr.com/

2008-06-13

う~んと唸っていたら

| 08:39 | う~んと唸っていたら - Rubyを勉強しようと思ってはじめた日記 を含むブックマーク はてなブックマーク - う~んと唸っていたら - Rubyを勉強しようと思ってはじめた日記 う~んと唸っていたら - Rubyを勉強しようと思ってはじめた日記 のブックマークコメント

RubyCGIで実行するとエラーが起こっても、ブラウザーでエラー内容を見ることが出来ません。

もちろん、コンソールで実行するとエラーが見られるんですが、ブラウザーで見たいわけです。

簡単に言うと、PHPみたいに。

そこで、う~んと唸っていたら、同じようなことを考えて、クラスにしている人がいた。

負けた。

2008-06-12

SQLのメモ書き

| 06:24 | SQLのメモ書き - Rubyを勉強しようと思ってはじめた日記 を含むブックマーク はてなブックマーク - SQLのメモ書き - Rubyを勉強しようと思ってはじめた日記 SQLのメモ書き - Rubyを勉強しようと思ってはじめた日記 のブックマークコメント

このページ、Rubyだけじゃなくて、SQLの勉強日記にもなってる気がします。

いっぺんに2つのことを書いていくと、なんだか混乱しそうです。

UPDATE

UPDATE テーブル名 SET 項目名=値,項目名=値 WHERE 条件;

UPDATE memos SET type=2 WHERE id=2;

DELETE

DELETE from memos WHERE id=8;

JOIN

複数のテーブルを結合する

select * from memos JOIN money_type ON money_type.id = memos.id;

結果

+----+-------+-------+---------------------+---------------------+------+---------+----+----------------+
| id | title | money | create_date         | modified_date       | type | message | id | name           |
+----+-------+-------+---------------------+---------------------+------+---------+----+----------------+
|  1 | test1 |  NULL | 2008-06-12 06:20:24 | 2008-06-01 16:27:25 |    1 | NULL    |  1 | コンビニ | 
|  2 | test1 |  NULL | 2008-06-12 06:20:47 | 2008-06-01 16:27:43 |    2 | NULL    |  2 | 外食     | 
+----+-------+-------+---------------------+---------------------+------+---------+----+----------------+

2008-06-09

Rubyのテンプレートエンジン(2)再チャレンジ

| 03:03 | Rubyのテンプレートエンジン(2)再チャレンジ - Rubyを勉強しようと思ってはじめた日記 を含むブックマーク はてなブックマーク - Rubyのテンプレートエンジン(2)再チャレンジ - Rubyを勉強しようと思ってはじめた日記 Rubyのテンプレートエンジン(2)再チャレンジ - Rubyを勉強しようと思ってはじめた日記 のブックマークコメント

ERBに負けてなるものか!と再チャレンジしてみた。なんとか、引き分けた感じです。

<%= %>というのは、その場で出力(print)するということなのね。<% %>にはRubyの処理が埋め込めますよ、と。こうしてみると、昔のPHP見たいな感じです。懐かしいね。

CGI

#!/usr/local/bin/ruby
print "Content-Type: text/html\n\n"
require 'pp'
require 'cgi'
require 'erb'

require 'memo'

$KCODE = 'u' 

file_path = './templates/index.html'

begin
    memos = Memo.find(:all)
    view = ERB.new(File.read(file_path))
    print view.result(binding)
    rescue => ex
        print '<strong>error:</strong>',ex
end

テンプレートファイル

<html>
<head>
<title>MEMO</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
</head>
<body>
<h1>MEMO(めも)</h1>
<p><%= file_path %></p>
<ul>
<% memos.each{|memo|%>
<li><%= memo.title %></li>
<%}%>
</ul>

</body>
</html>

2008-06-06

Rubyのテンプレートエンジン

| 08:24 | Rubyのテンプレートエンジン - Rubyを勉強しようと思ってはじめた日記 を含むブックマーク はてなブックマーク - Rubyのテンプレートエンジン - Rubyを勉強しようと思ってはじめた日記 Rubyのテンプレートエンジン - Rubyを勉強しようと思ってはじめた日記 のブックマークコメント

Rubyでテンプレートエンジンというと、ERBと考えています。

で、実際に使ってみるとPHPのSmartyや、PerlのTemplate::Toolkitとは感じが違います。

テンプレートエンジンのクラスに、テンプレートファイルのパスと配列などを渡して、出力結果を受け取り表示ではないのです。PHP事態に近い感じのことが出来る、ということみたいなんです。

ちょっと感じが違うのに手間取っているワタシです。

4 Hello, eRuby」を読んでみて、もう少しERBについて学んでみようと思います。

2008-06-05

erbがいまひとつわからない

| 02:51 | erbがいまひとつわからない - Rubyを勉強しようと思ってはじめた日記 を含むブックマーク はてなブックマーク - erbがいまひとつわからない - Rubyを勉強しようと思ってはじめた日記 erbがいまひとつわからない - Rubyを勉強しようと思ってはじめた日記 のブックマークコメント

なぜか、先に結果が表示されています。なんで?文字コードの問題?

呼び出しCGI

#!/usr/local/bin/ruby
print "Content-Type: text/html\n\n"
require 'pp'
require 'cgi'
require 'erb'

require 'memo'

file_path = './templates/index.html'

begin
memos = Memo.find(:all)
view = ERB.new(File.read(file_path),nil,'-')
view.run(binding)
    rescue => ex
        print '<strong>error:</strong>',ex
end

templateファイル

<html>
<head>
<title>MEMO</title>
</head>
<body>
<h1>MEMO</h1>
<p>現在時刻は <%= Time.now %> です</p>

<p><%= memos.each{|memo| print memo.title} %></p>

</body>
</html>

結果

test1test1<html>
<head>
<title>MEMO</title>
</head>
<body>
<h1>MEMO</h1>
<p>現在時刻は Fri Jun 06 02:48:53 +0900 2008 です</p>
<p>#<Memo:0xb7c27d94>#<Memo:0xb7c27d44></p>
</body>
</html>

2008-06-01

何を買ったのかメモをしておきたい(2)Activerecord::Baseを継承したクラス

| 18:46 | 何を買ったのかメモをしておきたい(2)Activerecord::Baseを継承したクラス - Rubyを勉強しようと思ってはじめた日記 を含むブックマーク はてなブックマーク - 何を買ったのかメモをしておきたい(2)Activerecord::Baseを継承したクラス - Rubyを勉強しようと思ってはじめた日記 何を買ったのかメモをしておきたい(2)Activerecord::Baseを継承したクラス - Rubyを勉強しようと思ってはじめた日記 のブックマークコメント

Activerecord::Baseを継承したクラスがあります(ここではMemos)。memosというテーブルの中身を全部取得するために、find(:all)で呼び出します。その結果は、Arrayクラス。でも、Memosをインスタンス化したmemos2は、Memosというクラスになっています。これってなんでなんだろう?

他のクラスの場合、継承すると親のメソッドを使える気がするんだけれど違うのかなあ?

memo.cgi

#!/usr/local/bin/ruby
print "Content-Type: text/html\n\n"
require 'memo'

begin
memos  = Memos.find(:all)
memos2 = Memos.new

print memos.class,'<hr>'
memos.methods.each{|method|
    print method,'<br>'
}

print memos2.class,'<hr>'
memos2.methods.each{|method|
    print method,'<br>'
}
    rescue => ex
        print '<strong>error:</strong>',ex
end

memo.rb

require 'rubygems'
require 'active_record'

ActiveRecord::Base.establish_connection(
   :adapter  => 'mysql',
   :host     => 'localhost',
   :username => 'root',
   :password => 'mysql',
   :database => 'memo'
)

class Memos < ActiveRecord::Base
    def find_by_date(date)
        return date
    end 
end

何を買ったのかメモをしておきたい(1)SQLを書いてみた

| 07:20 | 何を買ったのかメモをしておきたい(1)SQLを書いてみた - Rubyを勉強しようと思ってはじめた日記 を含むブックマーク はてなブックマーク - 何を買ったのかメモをしておきたい(1)SQLを書いてみた - Rubyを勉強しようと思ってはじめた日記 何を買ったのかメモをしておきたい(1)SQLを書いてみた - Rubyを勉強しようと思ってはじめた日記 のブックマークコメント

アクセス解析も終わっていないのに、他の事を書くのは気が引けます。

ひけるけれど、作ってみたいなあ、と思ったので。

SQLで気づき

参考サイト

sql.txt

DROP TABLE IF EXISTS memos;
create table memos (
id int auto_increment primary key,
title varchar(255),
money int,
create_date timestamp,
modified_date timestamp,
type int,
message text
);

DROP TABLE IF EXISTS money_type;
create table money_type (
id int auto_increment primary key,
name varchar(255) not null
);
INSERT INTO money_type (name) VALUES('コンビニ');
INSERT INTO money_type (name) VALUES('外食');
INSERT INTO money_type (name) VALUES('書籍');
INSERT INTO money_type (name) VALUES('食料');
INSERT INTO money_type (name) VALUES('その他');

DROP TABLE IF EXISTS users;
create table users (
id int auto_increment primary key,
user_id varchar(255) UNIQUE not null,
name varchar(255) not null,
type int
);
INSERT INTO users (user_id,name) VALUES('d4-1977','d4-1977');
カレンダー
2007 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 09 | 10 | 11 | 12 |
2009 | 06 | 08 |