findme.cloud作り中なのである。

Standard
findme.cloud作り中なのである。

それにしても全然進まない。それもこれもボブっ娘が後ろで寝ていてくれないせいである。破壊力強めの刺激ください。
 
 
GPS使ったWebサービス作ってみたい症候群はあいかわらず治らないのでこの週末も少しだけ進めた。コンセプトは「近くて遠いの人とつながろう」っていう方向で固まったのです。知ってるねん、オレ、知ってるねん!出会い系と紙一重だけど「つながる」って言葉とかけっこうポジティブにとらえてもらえること知ってるねん!これから作ってこうとしてる機能を簡単に説明すると、「登録」と「検索」の2機能があって、「登録」は携帯から今の位置情報と自分の情報を登録。緯度・経度+名前とかtwitterIDとか画像とか。「検索」はいま自分がいる場所の半径○kmで「登録」した人を探すっていう機能。職場とかよく遊ぶとことかで使って、何回か顔みてるはずなのに一生他人の人と他人じゃなくなれるようなサービスを狙っている。「出会いがない」なんて言わせないって広告が出せるね。「検索」を表す言葉はfindでいこうと思うけど、「登録」を表す言葉が見つからない。”cloud”にしてみてるけどいい感じじゃなさすぎる。。自分の目の前にあるエア掲示板に書き込むようなイメージの言葉、誰か作ってください。
 
(モバイル専用)

http://bugcloud.railsplayground.net/

 
QR

QR

 
 
携帯で取得した位置情報の精度がどんなもんかっていうの調べないといけないし、Google Maps APIで逆ジオコーディングしたときに変な住所が返ってきてしまうことがあるらしいので、テスト要因募集中です。報酬はうまい棒かチョコバットか蒲焼きさん太郎から選べます。
 
Google Maps APIで逆ジオコーディングやってみたものの、住所取得できないことがあるのかとかAddressDetails要素の属性Accuracyが”9″で返ってきたときってどんな感じなのかとかわからないことが多い。まーとりあえずメモ。いまのところ、jpmobile使って取得した緯度と経度を使って住所を取ってくるメソッドをコントローラーの中に書いてる。
 

require 'open-uri'
require 'nkf'
require 'rexml/document'

def getAreaName(lat, lon)
  url = "http://maps.google.com/maps/geo?output=xml&oe=utf-8&ll=#{lat}%2C#{lon}&hl=ja&key=#{Key}"
  doc = REXML::Document.new(open(url))
  if doc.elements["/kml/Response/Status/code"].text != "200"
    return 'error'
  end
  return doc.elements['/kml/Response/Placemark/address'].text
end

 
 
来週は自分の半径○km以内の人を検索するっていう機能を実装する!ロゴはこれで”findme.cloud”と読ませようという横着さです。

[memo][Rails]連携先テーブルの条件を指定してfind

Standard
[memo][Rails]連携先テーブルの条件を指定してfind

Railsで多対多の関係を持ったテーブル間で、連携先のテーブル側の条件を指定してfindしたかったんだけど、1時間ぐらいググった挙げ句わきげさんに先を越されたのでメモ。
 

やりたいこと

—————
dinner
—————
id  | name
—————
1  | にくじゃが
2  | シチュー
3  | チキンカレー
 
 
—————
foodstuff
—————
id  | name
—————
1  | にんじん
2  | たまねぎ
3  | 牛肉
4  | とり肉
 
 
—————————
dinners_foodstuffs
—————————
dinner_id  | foodstuff_id
—————————
1       | 1
1       | 2
1       | 3
2       | 1
2       | 2
2       | 3
3       | 1
3       | 2
3       | 4
 
 
みたいなテーブルとデータがあるとしたら、
Dinner.find(:all,:conditions => ‘とり肉が入ってる料理’)
みたいなこと。
 

正解

Dinner.find(:all, :include => :foodstuffs, :conditions => ["foodstuffs.name = ?", 'とり肉'])

 

ためす

  • rails mytest
  • ./script/generate model dinner name:string
  • ./script/generate model foodstuff name:string

 
 
mytest/models/dinner.rb編集

class Dinner < ActiveRecord::Base
  has_and_belongs_to_many :foodstuffs
end

 
mytest/models/foodstuff.rb編集

class Foodstuff < ActiveRecord::Base
  has_and_belongs_to_many :dinners
end

 
mytest/db/migrate/xxxxx_create_foodstuffs.rb編集

class CreateFoodstuffs < ActiveRecord::Migration
  def self.up
    create_table :foodstuffs do |t|
      t.string :name

      t.timestamps
    end

    # join table を作る
    create_table "dinners_foodstuffs", :id => false do |t|
      t.integer "dinner_id", "foodstuff_id"
    end
    add_index "dinners_foodstuffs", "dinner_id"
    add_index "dinners_foodstuffs", "foodstuff_id"
  end

  def self.down
    drop_table :foodstuffs
    drop_table :dinners_foodstuffs
  end
end

 
マイグレート実行

  • rake db/migrate

 
テストデータ作成
mytest/test/fixtures/dinners.yml編集

肉じゃが:
  id: 1
  name: にくじゃが

シチュー:
  id: 2
  name: シチュー

チキンカレー:
  id: 3
  name: チキンカレー

 
mytest/test/fixtures/foodstuffs.yml編集

にんじん:
  id: 1
  name: にんじん

たまねぎ:
  id: 2
  name: たまねぎ

牛肉:
  id: 3
  name: 牛肉

とり肉:
  id: 4
  name: とり肉

 
mytest/test/fixtures/dinners_foodstuffs.yml作成

one:
  dinner_id: 1
  foodstuff_id: 1

two:
  dinner_id: 1
  foodstuff_id: 2

three:
  dinner_id: 1
  foodstuff_id: 3

four:
  dinner_id: 2
  foodstuff_id: 1

five:
  dinner_id: 2
  foodstuff_id: 2

six:
  dinner_id: 2
  foodstuff_id: 3

seven:
  dinner_id: 3
  foodstuff_id: 1

eight:
  dinner_id: 3
  foodstuff_id: 2

nine:
  dinner_id: 3
  foodstuff_id: 4

 
 
 
テストデータ投入

  • rake db:fixtures:load FIXTURES=dinners,foodstuffs,dinners_foodstuffs

 
 
Railsコンソールから確認

  • ./script/console

 
 

Loading development environment (Rails 2.3.4)

>> Dinner.find(:all, :include => :foodstuffs, :conditions => ["foodstuffs.name = ?", 'とり肉'])
Dinner.find(:all, :include => :foodstuffs, :conditions => ["foodstuffs.name = ?", 'とり肉'])

=> [#<dinner id: 3, name: "チキンカレー", created_at: "2009-10-27 06:30:22", updated_at: "2009-10-27 06:30:22">]

>> 
?> 
?> 
?> Foodstuff.find(:all, :include => :dinners, :conditions => ["dinners.name = ?", 'にくじゃが'])
Foodstuff.find(:all, :include => :dinners, :conditions => ["dinners.name = ?", 'にくじゃが'])

=> [#<foodstuff id: 1, name: "にんじん", created_at: "2009-10-27 06:30:22", updated_at: "2009-10-27 06:30:22">, #</foodstuff><foodstuff id: 2, name: "たまねぎ", created_at: "2009-10-27 06:30:22", updated_at: "2009-10-27 06:30:22">, #</foodstuff><foodstuff id: 3, name: "牛肉", created_at: "2009-10-27 06:30:22", updated_at: "2009-10-27 06:30:22">]

>>