DHH 本がきたので、ちゃんと入門するよ!

ところで全然どうでもいいけど、本を読むと本のマジックというかなんというか、読んでいる間は「うわすげぇー簡単じゃーん」とかわかった気になるんだけど、実際のケース (今作ろうとしているのも) に当てはめようとするとことごとくうまく行かないという泣きたくなる情況が頻発して凹む。

とりあえず多対多の場合 ActiveRecords は id カラムを持たないテーブルを一個仲介役に作ってあげるみたい。んでテーブル名は二つのテーブルをアンダースコアでつなげたものにするらしい。(244 ページ, has_and_belongs_to_many)

それで、一個疑問は解けたけど、実際にやってみようとすると問題がまたでてくる。例えば vote っていうのはそれぞれの Topic に対して User がそれぞれ投票できるような感じ (Topic と User が多対多で、vote という意味で繋がってる) だけど、っていうかコード書いてみよう。

class Topic < ActiveRecord::Base
has_and_belongs_to_many :users
end
class User < ActiveRecord::Base
has_and_belongs_to_many :topics
end

とかやると vote っていう名前が一切でてこなくなる。

でもってどうするんのよ!って聞いてみたけど、要は has_and_belongs_to_many のリファレンス嫁ってことらしく読んでみる。実際実行して試したいけど、どうやって試せばいいか分からない。うーん気持ち悪い

下のようにするっぽい?

class Topic < ActiveRecord::Base
has_and_belongs_to_many :votes,
:join_table => "topic_votes"
:class_name => "User",
:foreign_key => "user_id"
end
class User < ActiveRecord::Base
has_and_belongs_to_many :voted_topics,
:join_table => "topic_votes"
:class_name => "Topic",
:foreign_key => "topic_id"
end

この has_* 系メソッドの第一引数は、そのまま@をつけてインスタンス変数名になるのかな。そうっぽいけど明確に書いてあるリソースが見つけられない。ソース嫁ってか。


それにしてもテーブル作って、generate model した直後でテストが通らない。もっと小さいアプリケーションからやるべきだなぁ……でもそういうアプリケーションで作りたいのがない。

  1. トップ
  2. rails
  3. Rails 入門, DB/ORM
  1. トップ
  2. ruby
  3. Rails 入門, DB/ORM

長い夢を見た。昨日学校の図書館で爆睡したときに見た夢と、昨日の夜妙に早く (8時ごろ) 寝て、今まで見ていた夢 (15時間)。続いていたけど、前半を覚えていない。クライマックス付近だけ覚えている。アルファギークはでてこなかった。むしろ珍しいことに現実にいる人が一人しかでてこなかった。


  • なんかの拍子に別の世界に紛れ込んだ。電車・トンネル
  • 高校生ぐらいの人たち (ないし人じゃない何か) が集まる四年制の学校
  • 廊下の奥の奥、生徒会役員とその周りの人が所属する人たちのための食堂がある。薄暗い。というかこの世界自体が薄暗い。関係者以外は入ってはいけない。
  • 一年生と二年生はライン (パシリの意味らしい) と呼ばれている。三年生・四年生にも呼び方があったけど忘れた。
  • 生徒会長は痩せ気味・身長はあまり高くないが、能力がアレらしい。結局見れなかったので不明
  • 彼女 (こちらの人間・髪が長い・身長が高い・微妙に天然入ってる) は時を止められるが、とめる時間帯が決まっている。ついでに準備が必要。周りに数名協力者がいる。
  • 彼女 (というより彼女の中にある何か) と、郊外のアパートの101号室に住むネコはキーである。
  • ある入り口がない建物の前にマットがしいてあるが、そこがトビラ。最後まで気付かない。というより気付けない。

キーパーソン (彼女とネコ) といろいろあるけど忘れた。ネコは人語を喋れる。アパートの一人暮らししている時点でただのネコじゃない。ネコのほうは純粋にキーだけど、彼女は元々こちらの人間なので、紛れ込んだときにキーが混入したみたいだ。たぶんそのキーのおかげで彼女の使える力が大きかったんだと思う。

なかなか死なない人がいた。だいぶひどいことをしたと思うけど、結局弱りもしなかった。気持ち悪かった。というか人じゃないんだなあれ。多摩川・長い道路・本

生徒会役員に味方が一人いる。と思いきや、割と味方がいる。というよりむしろ一緒にまぎれこんだ人たちは基本的に仲間のようだ。が、誰がまぎれこんだ人なのか正確に知る方法がないため信用できる数名で動く。


専用食堂で食事をしていると生徒会長が来る。逃げる。違う人間がターゲットになる。よかった。騒ぎが大きくなる。どうでもいいけどエロ本は一万円の罰金 (高すぎじゃない?)。ここで時が止まる (これは誰の協力ない。彼女の独断によるもの。協力がないため、動けたのは彼女と自分だけで、時間も短い)。手紙をもらう (内容は忘れた)。それとは別に口頭で、次の時間は4:00だと告げられる。

急いでこの世界がでないと、という話になる。このへん曖昧。先輩関係でネコがキーワードになっていることが判明し、アパートのネコを尋ねる。学校に帰る途中、今まで入り口がないことが変とは思いながらそれ以上を考えなかった場所がトビラであることに気付く。マーキング (あとで戻るためのしるし) をつけて学校へ。

他の人たちをまとめてマーキング位置に転送し、扉を開いてもとの世界へ。

  1. トップ
  2. dream
  3. 長い夢を見た。
  1. トップ
  2. life
  3. 長い夢を見た。

ビューって何。つまり、使うと何が嬉しいのかよくわからない。パフォーマンスのために云々っぽいけど、実際どういうケースで使うんだろう。


最近分かったこと。というか教えてもらったこと。

カラムに配列 (のようなもの) を突っ込みたいときは、配列の要素をテーブルにして、元の行の id とデータを複数突っ込むらしい。

/* この例だと当たり前な感じがするなぁ。 */
CREATE TABLE entries (
id INT PRIMARY KEY,
body TEXT,
...
);
CREATE TABLE comments (
id INT PRIMARY KEY,
entry_id INT,
body TEXT
);

多対多な関係の場合は仲介テーブルを作るみたい。

CREATE TABLE ideas (
id INT PRIMARY KEY,
body TEXT
);
CREATE TABLE users (
id INT PRIMARY_KEY,
name VARCHAR(60)
);
CREATE TABLE votes (
id INT PRIMARY KEY,
idea_id INT,
user_id INT
);
  1. トップ
  2. sql
  3. SQL わかんね
  1. トップ
  2. prog
  3. SQL わかんね

見て不愉快になる物は見なければいい、と人は言う。例えば自分に対する陰口が書かれた匿名掲示板。例えば自分に向けた悪意が積み重ねられているソーシャルブックマーク。身分の目に入るところにそれを入れなければいい、そう言う人は多い。中にはシステム的にそれをやってしまう人もいる。リンク先のさとうさんはそういう人のようだ。

これはちょっと違うんだよね。あのスクリプト書いたのはもうちょっと違う理由があって、まぁスクリプト自体はそういう風にも使えるんだけど、もともとは違うって意味でちょっと違う。

自分が「何を」消したかったかというと、見たくないものというより、もっとなんていうか、有害なものを消したかった。例えば、本当に例えばだけど「さっさとクソして寝ろ」とか「くだらない」とかしかコメントに書いてないブックマーク (ブックマーカー) って、その文に価値がないうえに、自分にとって不愉快になるという点で「有害」なんです。だから消したかった。読むに値しない以上に有害なのを消したかった。

不愉快になるけど、批判は全うで、読んでおくべきだなぁと思ったらそれを消したりはしない。

何も得るものがないうえに不愉快になるとか、そのこと自体がまた不愉快なのでスクリプトを書くに至った的何かで、そこまで感じなかったらスクリプトなんて書かないわけです。そうじゃなかったら $X("//div[@class='bookmarklist']/ul/li[a["+xpath_fl+"]]/text()[last()]") なんてめんどくさいコード書かないです。

  1. トップ
  2. life
  3. 無価値じゃなくて有害
  1. トップ
  2. web
  3. 無価値じゃなくて有害

LDR でのメインフィード (RSS) の購読数が100を超えてた。

なんとなくメインのフィードが100いくのが区切りな気がしてたので書いてみる。


Atom は 23, RSS は 102。Bloglines は 100 いってない。

  1. トップ
  2. net
  3. フィードの登録数

確認がとれたものと修正して動いたもの

ずばばっと表示させるやつはどうも挙動が怪しいです。動的にレンダリングするのを変えるのはやっぱちょっと苦手っぽい。

require 000.user.js

ignore-not-cc-photo.user.js を書き換えた。flickr が gamma になったときぐらいに HTML の構造を変えたらしく、もっと簡単に書けるようになっていた。ついでに $X 使うように修正した。

  1. トップ
  2. js
  3. flickr 系 user.js for Opera
  1. トップ
  2. gm
  3. flickr 系 user.js for Opera
  1. トップ
  2. opera
  3. flickr 系 user.js for Opera