2011年5月31日火曜日

ブラウザからタイムゾーンの読み取り

HTTP request headersにはタイムゾーン情報は無いようです。サーバー側がブラウザのタイムゾーンを受け取るには、大抵の人が提案しているjavascript経由しかなさそうですね。
言語はヘッダーにあるのに、残念です。
(http://matatabi-on-rails.blogspot.com/2010/05/rails.html)
以下のような感じでクッキーに時間のオフセットをjavascriptで書き込んで、サーバー側でそれを読み込んで、セットしているようです。

javascript:
document.cookie = 'tzoffset='+ (new Date()).getTimezoneOffset();

サーバー rails:

 def set_time_zone
    Time.zone = - cookies[:tzoffset].to_i / 60
 end


2011年5月28日土曜日

久しぶりにrailsの予約語ではまる

rootコントローラを作った場合、XXX_pathのヘルパー関数は正しく動作しません。root_path(Y)を指定した場合、 ZZZZ/root/Y への遷移を予想しますが、実際はルートにセットしたページに遷移します。
rootは正しくは予約語では無いようですが、1時間ほどはまったので書き込んでおきます。
railsの予約語はここにあるみたいです。http://wiki.rubyonrails.org/rails/pages/ReservedWords
railsの予約語は多いな。

2011年5月21日土曜日

rails コメント投稿機能の追加


WEB+DB 58  25ページぐらいにあります。
少し複雑になっているけど、コメント追加部分だからこんなもんだと思う。

----------------------------------
ItemにCommentモデルを追加していくサンプル
----------------------------------
//コメントモデルを作成  
$rails g model comment item:references comment:string name:string
$rake db:migrate

//コメントのコントローラー作成
$rails g controller comments

//itemsとcommentsにhas_manyの関係を持たす
app/models/item.rb
has_many :comments


//itemsの中にcommentsのルーティグを追加
confit/routes.rb
resources :items do
  resources :comments, :only =?[:new, :create]
end

//パーシャル作成命令(これはいい感じ。)
app/views/items/show.html.erb
の下の方
<%= render @item.comments.build %>


//パーシャルの実体
app/views/comments/_comment.html.erb
<%= form_for [comment.item, comment] do |f| %>


    <%= f.label :comment , 'any comment?' %>
    <%= f.text_field :comment %>
 

 

    <%= f.label :name ,'who are you?' %>
    <%= f.text_area :name %>
 

 

    <%= f.submit %>
 

<% end %>

//itemに関連したcomment作成
app/controllers/comments_controller.rb
の下の方
class CommentsController < ApplicationController
def create
item = Item.find params[:item_id]
item.comments.create params[:comment]
redirect_to item
end
end

// コメントの表示
app/views/items/show.html.erb
の下の方
comment
<% @item.comments.each do |comment| %>
<%= "#{comment.comment} by #{comment.name}" %>
<% end %>


rails 検索プラグイン  meta_search


ビューとコントローラにしかコードの追加はありません。すばらしいです。
ほぼ以下のところを参照にすれば出来てしまいます。
https://github.com/ernie/meta_search

参考にサンプルを作った時のコード

コントローラー:
    #@items = Item.all  #元の1行をコメントコメントあうと
#Itemはモデルクラスです
@search = Item.search(params[:search])
    @items = @search.all   # load all matching records
   
ビュー:
# items/index に GETでアクセスして@searchをパラメーターで送るようにセット
<%= form_for @search, :url => items_path, :html => {:method => :get} do |f| %>
    <%= f.label :dscr_or_name_contains %>
    #Itemのdecrとname検索対象としています
    <%= f.text_field :dscr_or_name_contains %>
    <%= f.submit "検索"%>
<% end %>

Rails File Uploadsライブラリ paperclip


paperclipの使い方で戸惑ったのでメモとして残しておく

たいてはドキュメントに従えば出来ますが、素人衆には若干補足が必要なところがあります(正式ドキュメントhttp://rubydoc.info/gems/paperclip/2.3.11/frames)
インストール
1:ImageMagicをインストール(それぞれの環境のパッケージ管理ソフトでインストールが一番いいと思います)
2.Gemfileの一番下に以下を追加。(railsプロジェクトを作るとプロジェクトの直下にGemfileが作られます)
gem "paperclip", "~> 2.3"
3.$bundle install

既にあるモデルに追加
1.必要なDB項目を追加以下はItemモデルに追加した例
$ rails generate migration add_photo_to_items photo_file_name:string photo_content_type:string photo_file_size:integer  photo_updated_at:datetime
2.モデルの設定を追加 以下はItemモデルに設定を追加した例
class Item < ActiveRecord::Base

    has_attached_file :photo,
     :styles => {
       :thumb=> "100x100>",
       :small  => "400x400>" }
end


3.2をDBに反映
$rake db:migrate

4.画像の追加画面の修正(rails3 の scaffoldで作っている場合はviewの中の_form.html.erbの修正  :html => { :multipart => true }が無いとファイルのアップロードが出来ません)
<%= form_for @item  , :html => { :multipart => true } do |f| %>
  ....
  <%= f.file_field :photo %>
  ....


5.画像の表示画面での修正(show.html.erb   以下は三種類の画像を表示しています)
<% if @item.photo.exists? then %>
<%= image_tag @item. photo.url %>
<%= image_tag @item. photo.url(: thumb) %>
<%= image_tag @item. photo.url(:small) %>
<% end %>


最初からモデルにpaperclip情報を追加する場合
1.itemモデルに追加する場合
$rails generate scaffold item .....photo_file_name:string photo_content_type:string photo_file_size:integer  photo_updated_at:datetime
2.これ以降は”既にあるモデルに追加”の2以降と同じです

入力画面と表示画面は次のようになります


2011年5月16日月曜日

Openpneもインストールしました

他のSNSとたいして変わりはありません。Opnepneではグループウエアの機能もあると思ってインストールしたのですが、実際にはそれはOpenpne officeと言って別の製品で有料でした。
私の感想ではOpenpneは今後衰退していくような気がします。理由は本体、プラグインの開発がかなりクローズなものになっていると思われる為です。
Openpne officeをフリーにすれば今だと流れは変わるとは思います。

2011年5月15日日曜日

グループウエア、SNSのインストール

グループウエアのaipo と SNSのbuddypress をさくらにインストールしました。
この手のソフトは以前は社内で意してくれていたので、自分でインストールした経験がなく、どの程度出来るかは不明でした。今回フリーソフトを自分のサーバー環境にインストールしてみて、フリーでもここまで出来るんだとビックリ。
興味のある方は使ってみてください。(アクセス数が少ない間はそのままにしておきます)
 
 aipo
    http://www16191u.sakura.ne.jp:81/aipo/
    ID:guest password guest
     
buddypress
    http://www16191u.sakura.ne.jp/buddypress/
    誰でも登録出来るようにしてあります。

となると役割分担は次のようになるかな??
グループウエア:スケジュール、施設管理、(グループメール? 多分SNSのほうがいい)
SNS:コミュネケーションツール(グループメール、アイデア出し) <----これは良いかもしれない。これで会議の回数が減って、いろんなメンバーからの意見を吸い取る事が出来る。

その後はtracなどのプロジェクト管理ツールでプロジェクトをすすめていく。

2011年5月14日土曜日

IKEAで見つけた机。テーブルの奥行きも75cmほどありなかなかいいです。本棚にテーブルを引っ掛けているだけなので強度はいまいちかもしれない。

2011年5月7日土曜日

恒例のゴールデンウイーク高野山ツーリング

今年も行ってきました。
一か月ぐらい自転車通勤をしていないので、結構疲れました。
このままでは大台ケ原ヒルクラムは途中でバスに乗ってしまうかも???

コースはこれ


昼食は笠田の中華料理屋さん。これが量が多い

花坂のやきもち