Home > Tags > ruby

ruby

昨日のWebアプリをブラッシュアップ!

IMG_0540 昨日は早めに就寝したので、夜中に目が覚めた。ってわけで、昨日のアプリをブラッシュアップ。別に実用性は皆無なのだけど、そこはお勉強ってわけで。

Continue reading

Sinatra + OAuth + Twitter で遊んでみる

IMG_0532 IMG_0536

今日は一日洗濯していた。

洗濯して思ったのだけど、実家暮らしや嫁さんがいるのならともかく、独り暮らしだったら週休二日は必要だなーと。お休みがまるまる一日家事でつぶれるからね。もちろん、家事をさぼって二日ごろごろしてもいいのだけど、それはそれで後で泣きを見るわけで。社会の分断、個人主義化、核家族化、そういったものが週休二日制を後押ししたのだなとなんとなく考える。

そのついでに、ちょっとWebアプリを作って遊んだ。
最近のつぶやきを取得して、つぶやきに費やした文字数の平均を出すだけの、ほんの Hello! World な内容だけど、やってみるといろいろ細かいところで躓くものだ。

Continue reading

今日は Sinatra で遊んでみた。

image

勉強するするといいながら、あんまり進んでいないスクリプトのお勉強。
今日は Sinatra で遊んでみた。

Continue reading

見た。買った。落とした。

Railsレシピブック 183の技
高橋 征義, 諸橋 恭介
ソフトバンククリエイティブ ( 2008-05-31 )
ISBN: 9784797336627
おすすめ度:アマゾンおすすめ度

買ってみた。早速落とした。

Continue reading

リンク先ページが存在しないとき、新規作成ページを表示する

Wiki なんかだと、 http://sample.com/posts/ほげほげ というリンク先のページが存在しない場合、「ほげほげ」をタイトルとしたページを新規作成するページへ飛ばされたりする。今日はあれを実装したいなー。

# posts_controller.rb

# GET /posts/1
# GET /posts/1.xml
def show
  @post = Post.find(params[:id])

  respond_to do |format|
    format.html # show.html.erb
    format.xml  { render :xml => @post }
  end
rescue ActiveRecord::RecordNotFound
  redirect_to :action => :new, :title => params[:id]
end

まず、show アクションをちょろちょろっとイジる。

ここでは、ActiveRecord::RecordNotFound エラーが発生したら、

/posts/new&title=新しいエントリーのタイトル

ページへリダイレクトするようにしている。

Continue reading

haml/sass (というか、sass) でちょっとハマった

a[href$='.mid']
  display: inline-block
  padding-left: 20px
  line-height: 18px
  background: transparent url(/images/music.png) center left no-repeat

これは失敗するんだけど、(コンパイルエラーになってしまうようだ)

a[href$=".mid"]
  display: inline-block
  padding-left: 20px
  line-height: 18px
  background: transparent url(/images/music.png) center left no-repeat

は成功するという話。haml/sass では文字列は "" で括るのが吉ですね。というか、"" で括れ。(ドキュメントにもそう書いてある!)

あと、 dsplay: inline-block; とついつい「;」を書いてしまうのだけど、そうすると解釈が通らない。ここも、個人的にはよくハマる。

そのほか、最初は & (親要素の参照)の使い方も最初はよく分からなかった。けれど、sass では display: inline-block (CSSな感じ) と書いても、 :display inline-block (ruby/rails な?感じ) と書いてもいいらしい。なので、a :visited などの場合は「:」の意味が曖昧になるのだなーと考えると、合点がいった(ちなみに、両記法はどちらか一方に制限することもできる)。具体的には、

a
  :color red

  &:visited
    :color blue

とかけば、a { color: red; } と a :visited { color: blue; } に展開できる。(&がないと、文法解釈にだいぶ困る!)

まぁ、ほんとはそういう意味ではないのかもしれないけれど、個人的にはそうやってこじつけて納得している(w

とにかく、 a:visited, a:hover … などとズラズラ書くより、ネスとして書いたほうが把握しやすい。そんな記述ができるのが sass のいいところ。だけど、そのためだけにわざわざ新しい文法を覚えるの? といわれれば微妙。やはり、mix-in や !変数 を使いこなせれなければ、真価を発揮したとはいえないんだろうな。

image

3時になっても眠れないので、今日はスタイルシートでリンクへファイル拡張子別にアイコンをつけてみる方法を少し考えてみました…ってことで。

ほとんどこのページを参照しましたけどね。

How to add file type Icons to Links with CSS | Psyked | Psyked

このブログに書いてあるコードはコピペしないでください。著作け…じゃなくて、ヤバいので…orz

# GET /users/daruyanagi
# GET /users/daruyanagi.xml
def show

  case params[:id]
  when /\d+/
    redirect_to :action => 'show',
      :id => User.find(params[:id]).login
  else
    @user = User.find_by_login(params[:id])
  end

  if @user != nil
    respond_to do |format|
      format.html
      format.xml  { render :xml => @user }
    end
  else
    respond_to do |format|
      format.html { render :ststus => 404,
        :file => 'public/404.html' }
      format.xml  { render :status => 404,
        :xml => '<error status="404 Not Found" />' }
    end
  end
end

結局、昨日のコードはこうなった。もちろんまだ完成ではない。

たぶん、9行目は

@user = User.find_by_login(params[:id])

の部分で params[:id] の値をあらかじめ検査しておかないとヤバい気がする。数字ではないことしか保障されていないし、SQLインジェクションとか起こっちゃったりしないのかな?

Rails (というか、ActiveRecord)はそこんとこちゃんとケアしてくれるのかもしれないけれど。

Continue reading

ハマりからの復活。

image

昨日のハマり、解消!なんか記事かいてたら思いついたよ。

敗因は route.rb で解決しようとしていたことだった。そりゃそうだよな。/users/1/ をget した場合は、users コントローラーの show アクションに :id => 1 が渡され、 /users/daruyanagi の場合は :id => ‘daruyanagi’ が渡される。ならば、users コントローラーの show アクションを処理すればよかっただけの話だった。

Continue reading

ちょっとつまった…

ルーティングわかんねえや…本でも読んでちゃんと理解しないと。

#route.rb(いろいろ省略)

ActionController::Routing::Routes.draw do |map|

  map.resources :posts
  map.resources :users, :has_many => :posts
  map.resource :session

  map.root :controller => 'posts', :action => 'show', :id => 9
end

好きにルートをイジったり、:has_many なんかで親子関係を作るのはわかった。でも、たとえば今は http://localhost:3000/users/1/posts で「ユーザーID:1が書いた投稿を一覧」はできるのだけど、これを http://localhost:3000/users/daruyanagi/posts にしたい場合(ユーザーID:1=ユーザー名:daruyanagi とする)はどうするんだろう。うろ覚えなんだけど、むかしは map.connect ‘/:users/[A-Za-z]/posts’ とかで動いていた記憶があるようなないようななのだが。

まぁ、今日はコメントとトラックバックを受けられて、RSS吐けるようになったのでお勉強は終わり。

attachment_fu プラグイン

sshot-25

Ruby on Rails のお勉強中。
だんだん慣れてきて、エラーが出ても原因の見当がつくようになってきた。まだまだ、ruby の文法をマスターしていないので、意外なところで間違える。「elsif」を「elseif」って書いてたりとかw

Continue reading

Home > Tags > ruby

My Friend Feed

http://friendfeed.com/daruyanagi

Google Analyticator

628
 Unique Visitors 
 (1 day) 
Powered By Google Analytics

Return to page top