ウェブ-HACKS 「とりあえずやってみよう!」ブログでタグ「Rails」が付けられているもの

#5 railsでユーザーエージェント別でロジックを切り替える

   ブックマークに追加する
WebScrapもほとんどできているのですが、細かなところの手直しをしています。
今回はPC、モバイルで処理を分けたい時の方法です。

以下の通りで@requestオブジェクトから簡単に取り出せます。
(controllersでもviewsでもどちらでもOK)

user_agent = @request.user_agent
puts user_agent   #=> Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.8.1.12) Gecko/20080201 Firefox/2.0.0.12 

たとえば、viewで切り替えたい場合も以下でOK!

<% if /agent/ =~ @request.user_agent -%>
  処理
<% end -%>


【参考サイト】

#3 RailsでActiveRecord のエラーメッセージを日本語化する(ActiveHeart)

   ブックマークに追加する
ブログの更新も大分滞っていました。仕事が忙しくてなかなかWebScrapも作成する時間があまり取れないんですよね。おおよそ機能はつくれたのでいくつか、忘れないようにメモしときます。

今回は、Railsのエラーメッセージを日本語化するというもの。
Ruby-GetTextを使うのが一般的のようですが、今回はそこまできっちり作らなくても良いかなと思いActiveHeartを使用しました。以下手順載せます。すごい簡単ですよ。

まず以前にSubversionをインストールしてますので、railsコマンドで生成したフォルダで以下実行。


$ ruby script/plugin install http://svn.rails2u.com/public/plugins/trunk/active_heart/

+ ./active_heart/init.rb
+ ./active_heart/lib/active_record_messages_ja.rb
+ ./active_heart/lib/iso2022jp_mailer.rb
+ ./active_heart/lib/trans_sid.rb

これだけでエラーメッセージが日本語化します。すごく簡単ですよね。
テーブルのカラム名はそのままですので、その場合はmodelに以下設定をすればOK

set_field_namesでカラム名と表示文字列をマッピングする

例)
class Bookmark < ActiveRecord::Base
  set_field_names :title => 'タイトル', :url => 'URL'
  validates_presence_of :title, :url, 
                        :message => "が未入力です"
end

これで日本語化はOKです。ちなみにActiveHeart自体は非推奨とされており、Ruby-GetTextを使用するようにコメントされていますね。確かにサービスのグローバル化を考えればその方が良いと思います。
私はActiveRecordのエラー文言を日本語にしたいだけでしたので他のモジュールはコメントアウトしました。
一応そちらも記載しておきます。


warn 'ActiveHeart is obsolute plugin!'
warn 'Please use Ruby-GetText or jpmobile'

require_dependency 'active_record_messages_ja'if defined? ActiveRecord::Base
# Comment Out!
#require_dependency 'trans_sid' #require_dependency 'iso2022jp_mailer' if defined? ActionMailer::Base

【参考サイト】

#2 Railsで別サイトへリダイレクト(redirect_to)

   ブックマークに追加する
こちらもWebScrapアプリケーションを作成中に疑問に思ったので覚書として書きます。操作完了したら元URLへリダイレクトしようと思ったのですが別サイト(別ドメイン)へのリダイレクトを以下2つの方法で試しました。

renderメソッドでは外部サイトにはリダイレクトできず、redirect_toを使用したら上手くいきました。

参考プログラムは以下の通りです。


    if @item.save
      flash[:notice] = 'Item was successfully created.'
      redirect_to("http://www.sample.com/") 
    else
      render :action => 'new'
    end

#1 RailsでHTMLメールを送信する(ActionMailer)

   ブックマークに追加する
以前に話した「WebScrap」を仕事終わってから、作成しているのですが、Webページをキャッシュする部分でDBに保存するのはリソース上やはり厳しいということで自分のGMailに送信することにしました。

これであれば、Web上にHTMLのキャッシュを残しておくことができ、さらに過去にキャッシュしたHTMLページのデータもGoogleの検索エンジンで見つけられます。

Railsで通常のメールを送信するのは、以前の記事(ActionMailer)に書きましたが、HTML形式のメール送信の方法は以下の通りです。

  • コントローラーに以下メソッドをprivateメソッドとして準備しました。

  def sendmail(title, content, mail)
    email = RMailer.create_sent( title, content, to )
    email.set_content_type("text/html")
    ScrapMailer.deliver(email)
  end

まずはemailオブジェクトを生成し、content_typeを設定してからメール送信すればOKですね。 

#0 RailsでScrapBookのWeb版をつくる(WebScrap)

   ブックマークに追加する
最近、Webアプリケーションを全然つくっていなかったので、以前からつくりたかったScrapBookのWeb版をつくりたいと思います。過去のブログで書いた「Firefoxで必ず使う7つのアドオン」の3位にしたScrapBookの簡易版(きちんとつくるのは手間がかかりそうなので・・・)をWeb上に保存できるサービスを考えてみたいなと思います。
※この前読んだレバレッジ勉強法にもあるようにWebのデータをスクラップできて、どんどん捨てていくようなことが簡単にできるように

ということでいつも通り要件定義

  • まずはユーザ登録(メールアドレスとパスワードくらいで十分でしょう)
  • URLを入力するとサーバに保存できる
  • どこからでも登録したサイトが確認できて、ブックマークと違いリンクが消えていることがない(データをサーバに保存するから)
サービス名はWebScrapとします。

片手間でも2週間くらいでつくれないかなぁー。

#6 ActionMailで会員登録時にメール送信する

   ブックマークに追加する
会員登録時にメールを送信し、クリック後会員登録完了とすることで
メールアドレスのチェックをおこなう。
railsではActionMailerという仕組みにより、簡単にテンプレートメールを送信できます。
以下5つのSTEPで実装できます。


1) Rails環境ファイルにメールサーバを設定
以下environment.rbファイルにメールサーバの設定をする
- mytask/config/environment.rbに以下追加(下線部は環境によって変更する)

    # Include your application configuration below
    ActionMailer::Base.delivery_method = :smtp
    ActionMailer::Base.server_settings = {
      :address  => "address",
      :port  => 25,
      :domain  => 'domain',
      :user_name  => 'user_name',
      :password  => 'password',
      :authentication  => :login
        }

2) generateを使ってActionMailerを作成する
モデルとして作成されるので注意する。テンプレートファイルはviewファイルとして生成される

    $ ruby script/generate mailer AccountMailer sent
          exists  app/models/
          create  app/views/account_mailer
          exists  test/unit/
          create  test/fixtures/account_mailer
          create  app/models/account_mailer.rb
          create  test/unit/account_mailer_test.rb
          create  app/views/account_mailer/sent.rhtml
          create  test/fixtures/account_mailer/sent

3) model(accout_mailer)の編集

※app/models/account_mailer.rbに以下メソッドを追加する
 
   $ ruby script/generate mailer AccountMailer sent
          exists  app/models/
          create  app/views/account_mailer
          exists  test/unit/
          create  test/fixtures/account_mailer
          create  app/models/account_mailer.rb
          create  test/unit/account_mailer_test.rb
          create  app/views/account_mailer/sent.rhtml
          create  test/fixtures/account_mailer/sent

4 メールのテンプレートファイルを編集する

※mytask/app/views/account_mailer/sent.rhtml を編集する

5 controllerからメールモデルを呼び出す

    def sendmail
      @user = User.find(params[:id])
      AccountMailer.deliver_sent(@user)
    end

これで完了、5分くらいでできちゃいます。

#5 ログイン画面を作成する(gem install login_generator)

   ブックマークに追加する
ログイン機能は、作成すると案外面倒なもの。
他のフレームワーク同様、Railsにももちろん他のエンジニアが作成したモジュールを
簡単に再利用できる仕組みがととのっています

  • まずはrootユーザに変更
    $ su - root
    Password:
  • gemlogin_generatorをインストールする
# gem install login_generator
Bulk updating Gem source index for: http://gems.rubyforge.org
Successfully installed login_generator-1.2.2
  • インストールが正常に完了したら、以下コマンドで作成開始
  (以下はコントローラーをaccountで生成)

 $ ruby script/generate login account
      create  lib/login_system.rb
      create  app/controllers/account_controller.rb
      create  test/functional/account_controller_test.rb

#4 scaffoldでRailsアプリケーションを作成

   ブックマークに追加する
Railsを覚えようと思った理由の1つがscaffoldが使ってみたかったためです。アプリケーションに必要なスケルトンをコマンド1つで作成できるという優れものです。とりあえず本の通りにやってみました。



とりあえず、helpでコマンドを確認する

$ ruby script/generate scaffold  --help
Usage: script/generate scaffold ModelName [ControllerName] [action, ...]

Rails Info:
    -v, --version                    Show the Rails version number and quit.
    -h, --help                       Show this help message and quit.

General Options:
    -p, --pretend                    Run but do not make any changes.
    -f, --force                      Overwrite files that already exist.
    -s, --skip                       Skip files that already exist.
    -q, --quiet                      Suppress normal output.
    -t, --backtrace                  Debugging: show backtrace on errors.
    -c, --svn                        Modify files with subversion. (Note: svn must be in path)
・・・省略

とりあえず、以下のコマンドで生成されるようです。

ruby script/generate scaffold [model_name] [controller_name]

それでは、実行してみます。

$ ruby script/generate scaffold project mytask
      exists  app/controllers/
      exists  app/helpers/
      exists  app/views/mytask
      exists  app/views/layouts/
      exists  test/functional/
  dependency  model
      exists    app/models/
      exists    test/unit/
      exists    test/fixtures/
・・・省略
これでスケルトンが生成されました。本当に簡単ですね。

#3 MySQLの設定とRailsとのつなぎこみ

   ブックマークに追加する
今回はMySQLでデータベースとテーブル作成

以下3つのデータベースを作成する
(ただ、_testはどのように使うかよくわからなかったので、_developmentと_productionだけ作りました)

■データベースを作成

  • mytask_development
  • mytask_test
  • mytask_production
    mysql> create database mytask_development;
    mysql> create database mytask_production;
    mysql> grant all on mytask_development.* to username@localhost identified by 'password';
    mysql> grant all on mytask_production.* to username@localhost identified by 'password';

■テーブルを作成、カテゴリ(プロジェクト)とタスク
タスクを纏めるカテゴリのようなもの(ここではプロジェクト)テーブルとタスクそのもののテーブルを作成する。
    create table projects (
      id int unsigned auto_increment,
      name varchar(128) not null,
      content varchar(255),
      task_count int default 0,
      status enum('close','open') default 'close',
      created_at timestamp,
      updated_at timestamp,
      limited_at timestamp,
      primary key  (id),
      index status_idx (status)
    );

    create table tasks (
      id int unsigned auto_increment,
      project_id int unsigned not null,
      name varchar(128) not null,
      content text,
      status enum('yet', 'exec', 'finish') default 'yet',
      created_at timestamp,
      updated_at timestamp,
      limited_at timestamp,
      primary key  (id),
      index project_id_idx (project_id),
      index status_idx (status)
    );

■railsアプリケーションの設定ファイル(DB設定と文字コート)を編集

mytask/config/database.yml を編集
development:
  adapter: mysql
  database: mytask_development
  username: username
  password: password
  socket: /var/lib/mysql/mysql.sock
  encoding: utf8

mytask/config/environment.rbに文字コード追加

#KCODE = 'u'
# Be sure to restart your web server when you modify this file.

#2 railsでmyTaskアプリケーションのスケルトン作成

   ブックマークに追加する
いよいよ、Railsでアプリケーション作成します。本に書いている通りにすすめていきます。
railsコマンドはアプリケーションに必要なスケルトンを生成してくれるようです。
以下に手順を説明します。

1) railsでアプリケーション作成
  rails [アプリケーション名]でrailsアプリケーションを作成する
$ rails mytask
      create  app/controllers
      create  app/helpers
      create  app/models
      create  app/views/layouts
      create  config/environments
      create  components
      create  db
      ・・・省略

2) WEBrickで動作確認する
  Webrick(ウェブリック)とはRubyで作成されたWebサーバでRails開発(development)では
  編集したコードが自動でロードされるため開発効率がよいです。
$ cd mytask/
$ ruby script/server
=> Booting WEBrick...
=> Rails application started on http://0.0.0.0:3000
      ruby script/server でWEBrickを起動する

      http://localhost:3000/でアクセスするとRailsのWelcomeページが表示される
Ci071202003512.jpg

#1 まずは環境設定(RubyGemsとRailsのインストール作業)

   ブックマークに追加する
かならずはまってしまうのが環境設定。1回設定すればOKですが、覚書として書いときます。

1) RubyとMySQLのバージョンを以下コマンドで確認できます
  とりあえずレンタルサーバはFedora6でMySQLとRubyは既にインストール済み。以下コマンドで各々のバージョンを確認します。

  Rubyのバージョンの確認方法
$ ruby -v
ruby 1.8.5 (2007-09-24 patchlevel 114) [i386-linux] 

  MySQLのバージョンの確認方法
$ mysql --version
mysql  Ver 14.12 Distrib 5.0.27, for redhat-linux-gnu (i686) using readline 5.0

ということで、まずはRailsのダウンロード&インストール

2)  RubyGemsのダウンロード
  RubyGemsはRubyのパッケージ管理ツールでRailsと関連ライブラリのインストールも簡単に行えるようになります。

    というわけで、RubyForgeよりrubygemsをダウンロードする

3) RubyGemsのインストール

  いよいよインストール。これが完了すればgemコマンドが使用できるようになります。
    $ tar xvzf rubygems-0.9.4.tgz
    $ ls
    rubygems-0.9.4  rubygems-0.9.4.tgz
    $ cd rubygems-0.9.4
    $ ls
    ChangeLog  LICENSE.txt  Rakefile  TODO  doc       gemspecs  pkgs             redist   setup.rb
    GPL.txt    README       Releases  bin   examples  lib       post-install.rb  scripts  test

    # su - root
    # ruby setup.rb

3) Railsのインストール
    
Gemsをインストール後、以下のgemコマンドでrailsをインストールする
# gem install rails --include-dependencies
$ rails -v
Rails 1.2.4

こんな感じでOK!


次回こそ、Railsでアプリ作成に入ります。

#0 Ruby On Railsでタスク管理ツールを作成する

   ブックマークに追加する
Ruby on Railsはまだ試してみたことがないので、勉強のため、シンプルなタスク管理ツールをつくってみたいと思います。

私はタスク管理にCheck*PadSlimTimerなどを使っているのですが、どちらもとてもシンプルで使いやすいです。それらサービスを手本に、よりプロジェクト管理に適したツールに作成しようと思います。自分のタスクを洗い出すツールのため、名前はmyTaskにします。(後から変える可能性ありですが。。。)

簡単な機能紹介。


■ 機能一覧
  1. タスクを書き出せる(リストで見れる)
  2. タスクに期限を設定できる
  3. タスクには、未着手、実行中、完了等のステータスがある
  4. メールで期限がきたら教えてくれる
  5. カテゴリごとにタスクを纏められる
  6. タスクは共有できる
  7. 完了までにかかった時間を確認できる

とりあえずこれくらいでいいでしょう。
では次回からいよいよRailsを使ってみます。
あわせて読みたいブログパーツ
フィードメーター - ウェブ-HACKS 「とりあえずやってみよう!」ブログ   
track feed
  • SEO対策 
  • _ 
  • _ 
  •  
  •  

このブログはクリエイティブ・コモンズでライセンスされています。
Google

Tags