Hatena::ブログ(Diary)

130単位

2013-09-03

Rails ポリモーフィック関連の関連名の命名

Railsポリモーフィック関連という機能があります。

class Picture < ActiveRecord::Base
  belongs_to :imageable, polymorphic: true
end

class Employee < ActiveRecord::Base
  has_many :pictures, as: :imageable
end

class Product < ActiveRecord::Base
  has_many :pictures, as: :imageable
end

ざっくりいうと、複数の親Modelに属するような子Modelの関連を抽象化してまとめる機能です。詳しくはRails Guidesや以下のリンク先を参照ください。

関連名

ここで注目したいのが、Modelを関連づける関連名です。Rails Guidesの例にある "imageable"。聞き慣れないですが、どうなんでしょう。確かにimageは動詞でもあるため文法的には間違ってなさそうです。が、実際に扱おうとすると違和感が生じてきます。

親Modelから子Modelを参照する際は通常の関連と同様に扱えます。

pictures = employee.pictures

逆に子Modelから呼び出そうとすると、以下のようになります。

employee = picture.imageable

imageable というメソッドで employee が返るのはちょっとわかりにくい気がします。

命名具体例

調べていて、関連名の付けかたには2種類あるように見受けられました。(見出しは造語です)

able接尾辞
子Model関連名親Model
Comment :commentable Article/Photo
Address :addressable Person/Company
AttachmentImage :attachable Blog/Entry
抽象名詞
子Model関連名親Model
Item :parent User/Machine
Comment :resource Diary/Book/Shop
Paste :item Snippet/Picture
Employee :work_place Office/Factory

抽象名詞のほうで"parent"や"resource"は抽象度が高く、(開発者間で納得できれば)汎用的に使えそうです。英語の意味的には"object"も使いたいところですが、object_idが予約されているため使えません。

命名比較

able接尾辞
  • able接尾辞なModuleをincludeする感じ
  • 関連名が動詞+ableなので悩まなくて済む
  • 子Modelから親Modelの呼び出しがわかりにくい
  • Rails Guideで例示されているということは推奨なのかもしれない
  • 海外のBlog記事ではable接尾辞の採用が目立つ
抽象名詞
  • 抽象名詞なClass継承する感じ(STIのような命名)
  • 適切な関連名が見つかるかどうかは対象Modelと語彙力に依存
    • ここで割と具体的な名詞を使うと他のModelに使える名詞がひとつ減る(細かいけど)
  • 子Modelから親Modelの呼び出しがまだわかりやすい
  • 日本人エンジニアは抽象名詞を採用している例が見受けられる

まとめ

特に結論はありません。初めて使ってみた印象などを書いてみました。どちらを選択するかは好みの問題だと思います。ちなみに、自分のケースでは抽象名詞を採用しました。やはり子Modelからの参照時に名詞であったほうが違和感が少ないように思えたからです。たとえ返るObjectがメソッド名と異なったとしても、ですね。(ただし命名には苦労しました…)

ご意見などあれば遠慮なくいただけるとありがたいです!


4844331566
改訂新版 基礎Ruby on Rails (IMPRESS KISO SERIES)

4797363827
Rails3レシピブック 190の技

2011-07-11

foursquare APIを使って自動フレンド承認

foursquare APIラッパーgemライブラリを使います。

環境

OAuthアクセストークン取得

CLIENT ID, CLIENT SECRET取得

f:id:deeeki:20110711070102p:image

アクセストークン取得
require 'foursquare'
CLIENT_ID = 'XXX'
CLIENT_SECRET = 'XXX'

oauth = Foursquare::OAuth.new(CLIENT_ID, CLIENT_SECRET)

request_token = oauth.request_token.token
request_secret = oauth.request_token.secret

print "access following url.\n"
print oauth.request_token.authorize_url
print "\nand input access code. >> \n"
VERIFIER = STDIN.gets.gsub!(/\n/,'')

access_token, access_secret = oauth.authorize_from_request(request_token, request_secret, VERIFIER)

print "success! paste following code to config file.\n"
print "ACCESS_TOKEN = '" + access_token + "'\n"
print "ACCESS_SECRET = '" + access_secret + "'\n"
  • authorize_urlにアクセスして表示されたコードを入力して認証

f:id:deeeki:20110711070103p:image

フレンド承認

require 'foursquare'
CLIENT_ID = 'XXX'
CLIENT_SECRET = 'XXX'
ACCESS_TOKEN = 'XXX'
ACCESS_SECRET = 'XXX'

oauth = Foursquare::OAuth.new(CLIENT_ID, CLIENT_SECRET)
oauth.authorize_from_access(ACCESS_TOKEN, ACCESS_SECRET)
foursquare = Foursquare::Base.new(oauth)

foursquare.friend_requests.each do |u|
	p u.firstname
	if u.photo =~ /foursquare.com\/img\/blank/
		foursquare.friend_deny :uid => u.id
	else
		foursquare.friend_approve :uid => u.id
	end
end
  • friend_requestsでフレンド申請中ユーザーのリスト取得
  • friend_approveでフレンド承認
  • friend_denyでフレンド拒否
  • これをcronに登録するなどして自動化

サンプル

一連の手順のサンプルコードです。

関連リンク

おまけ

デフォルトの設定だと、フレンドであるユーザーにはメールアドレスが公開状態になっているみたいです。気になる方は確認してチェックを外しておくといいと思います。

f:id:deeeki:20110711070104p:image

4873113946
プログラミング言語 Ruby

0071773177
The Power of foursquare: 7 Innovative Ways to Get Customers to Check In Wherever They Are


関連記事

2010-04-06

ブックマークしたモバイル開発記事まとめ

deeekiモバイル関連のブックマークを精査してまとめたいな ( 2010-04-06 17:43:12 )

というわけで、自分の過去のはてなブックマークをざっと読み返してまとめてみました。精査とまではいきませんが、それぞれの見出しで記事の新しい順に並べています。押さえておきたい点は引用/メモさせていただきました。モバイルソーシャルアプリ開発に活かしたいと思います。

マークアップ

ユーザビリティ

その他Tips

ソーシャルアプリ

参考デザイン集

ニュースサイト

ライブラリ/ツール

CakePHP

Google Analytics

まとめ

リンク集


ついでに読んだことのある書籍です。どちらも体系的な知識を得るにはおすすめです。

4797348488
『携帯サイト コーディング&デザイン (大型本)』

4844326317
『モバイルユーザビリティ・デザイン Web制作者が身につけておくべき新・100の法則。 (大型本)』

2010-02-04

000webhost.comにWordPress2.9.1をインストール

自分が行った手順メモです。

WordPressの設置

FTPでもできるのですが、ファイル数に制限があるらしいのです(現在はおそらく6000)。参考情報は以下。

ただし、圧縮ファイルを展開した場合はカウントされないようです。というわけで以下のようにします。

  • コントロールパネルから「1Click Website Restore」クリック
    f:id:deeeki:20100204225048j:image
  • WordPressの圧縮ファイルを選択してアップロード
    f:id:deeeki:20100204225047j:image
    • けっこう時間がかかる
      f:id:deeeki:20100204225046j:image
  • エラーが表示される
    f:id:deeeki:20100204225036j:image
    • しかし普通にインストールできたので問題ないっぽい

ちなみにデータベースはコントロールパネルの「MySQL」から作成します。

WordPress初期設定

変更したところのみです。

各種設定
  • ユーザー追加してadmin削除
  • 一般設定
    • キャッチフレーズ変更
    • 日付フォーマット変更
    • 時刻フォーマット変更
  • 投稿設定
    • 不正にネスト化した XHTML を自動的に修正する
    • 更新情報サービスにping送信先追加
  • パーマリンク設定
    • 日付と投稿名(http://deeeki.info/blog/2010/01/30/sample-post/)
テーマ

せっかくなので新しめのものをこちらより選定。

Photoshop Vip ≫ 最近公開されたばかりの新しいWordPress(ワードプレス)テンプレート20個まとめ
http://photoshopvip.net/archives/11678
プラグイン

前回とあまり変わってませんが、追加したものを紹介します。

参考リンク

初期設定の際に参考になる記事です。

WordPressでWebサイトを構築するまでの手順リスト - かちびと.net 
http://kachibito.net/wordpress/build-process-lists.html

WordPressの管理領域を守る10の方法 | YATA BLOG 
http://etwas.wolfish.org/blog/2009/03/18/2009031802/

簡単な作業でWordPressのセキュリティをアップするチップス | コリス 
http://coliss.com/articles/blog/wordpress/security-tipps-for-wordpress-install.html

【関連記事】
000webhost.comにお名前.comのドメインを設定 - 130単位
land.toにWordPress2.8.4をインストール - 130単位

2009-11-21

紅葉をみてきた

三連休で一番天気が良さそうな日に急遽決めました。愛知県瀬戸市にある定光寺です。

joukouji_05

joukouji_10

joukouji_13

Search: joukouji | Flickr

定光寺・定光寺公園 愛知・瀬戸市:東海紅葉名所ガイド2009 - Walkerplus
http://www.walkerplus.com/koyo/tokai/detail/ky5042.html

その後、岩谷堂公園へ。ライトアップされた紅葉はまた違った味わいがありました。

ただ、不覚にもデジカメが電池切れ。iPhoneでの夜間の撮影は限界があるなーというのを学びました。

f:id:deeeki:20091121232602j:image

岩屋堂公園 愛知・瀬戸市:東海紅葉名所ガイド2009 - Walkerplus
http://www.walkerplus.com/koyo/tokai/detail/ky5043.html