【ハウツー】

ワンソースからiPhone/Androidのネイティブアプリが! 話題の"Rhodes"を試す

4 Hello, Rhodes! - モデルの作成

    富田宏昭  [2010/07/22]

    アプリケーションを無事に起動することが確認できた。それでは続けて、モデルとコントローラを作成してみよう。ここでは「product」モデルを作成する。モデル作成時に「brand」「name」「price」「quantity」「sku」の5カラムを指定した。

    % rhogen model product brand,name,price,quantity,sku
    Generating with model generator:
         [ADDED]  app/Product/index.erb
         [ADDED]  app/Product/edit.erb
         [ADDED]  app/Product/new.erb
         [ADDED]  app/Product/show.erb
         [ADDED]  app/Product/index.bb.erb
         [ADDED]  app/Product/edit.bb.erb
         [ADDED]  app/Product/new.bb.erb
         [ADDED]  app/Product/show.bb.erb
         [ADDED]  app/Product/product_controller.rb
         [ADDED]  app/Product/product.rb
         [ADDED]  app/test/product_spec.rb
    

    app/Productディレクトリ以下にモデルファイル(product.rb)とコントローラファイル(product_controller.rb)、ビューファイル(*.erb)が作成された。

    モデル - product.rb

    # The model has already been created by the framework, and extends Rhom::RhomObject
    # You can add more methods here
    class Product
      include Rhom::PropertyBag
    
      #add model specifc code here
    end
    

    コントローラ - product_controller.rb

    require 'rho/rhocontroller'
    require 'helpers/browser_helper'
    
    class ProductController < Rho::RhoController
      include BrowserHelper
    
      #GET /Product
      def index
        @products = Product.find(:all)
        render
      end
    
      # GET /Product/{1}
      def show
        @product = Product.find(@params['id'])
        if @product
          render :action => :show
        else
          redirect :action => :index
        end
      end
    
      # GET /Product/new
      def new
        @product = Product.new
        render :action => :new
      end
    
      # GET /Product/{1}/edit
      def edit
        @product = Product.find(@params['id'])
        if @product
          render :action => :edit
        else
          redirect :action => :index
        end
      end
    
      # POST /Product/create
      def create
        @product = Product.new(@params['product'])
        @product.save
        redirect :action => :index
      end
    
      # POST /Product/{1}/update
      def update
        @product = Product.find(@params['id'])
        @product.update_attributes(@params['product']) if @product
        redirect :action => :index
      end
    
      # POST /Product/{1}/delete
      def delete
        @product = Product.find(@params['id'])
        @product.destroy if @product
        redirect :action => :index
      end
    end
    

    ビュー - index.erb

    <div id="pageTitle">
        <h1>Products</h1>
    </div>
    
    <div id="toolbar">
        <div id="leftItem" class="regularButton"><%= link_to "Home", Rho::RhoConfig.start_path %></div>
        <div id="rightItem" class="regularButton"><%= link_to "New", :controller => :Product, :action => :new %></div>
    </div>
    
    <div id="content">
        <ul>
            <% @products.each do |obj| %>
    
                <li>
                    <a href="<%= url_for :action => :show, :id => obj.object %>">
                        <span class="title"><%= obj.brand %></span>
                        <span class="disclosure_indicator"></span>
                    </a>
                </li>
    
            <% end %>
        </ul>
    </div>
    

    rhogenでモデルを作成できたら、ホーム画面からリンクを貼ってみる。app/index.erbの「Add Links Here...」を変更し、Productへのリンクを貼る。

    % diff -u index.erb.orig index.erb
    --- index.erb.orig      2010-07-09 17:02:17.000000000 +0900
    +++ index.erb   2010-07-09 17:02:36.000000000 +0900
    @@ -14,10 +14,10 @@
     <div id="content">
         <ul>
             <li>
    -            <a href="#">
    -                <span class="title">Add Links Here...</span>
    +            <a href="Product">
    +                <span class="title">Products</span>
                     <span class="disclosure_indicator"></span>
                 </a>
             </li>
         </ul>
    -</div>
    \ No newline at end of file
    +</div>
    

    さきほどと同様の手順で、iPhone/Android用のアプリケーションをビルドし、各エミュレータ上で動作を確認する。

    index.erbに追加したリンクが表示されている

    Productsの一覧画面(Product/index.erb)。まだデータを登録していないので、表示されるレコードはなし。右上部の「New」ボタンから新規登録画面へ移動する

    Productsの登録画面(Product/new.erb)

    データを登録すると、一覧画面に追加したレコードが見えるようになっている

    Productsの詳細画面(Product/view.erb)。右上の「Edit」ボタンから変更画面へ移動する

    ホーム画面が表示されずにNot Foundと出たり、おかしな動作をするときはいったんrake cleanを実行してみよう。

    RhodesでiPhone/Androidのネイティブアプリケーションを動作させてみるところまでを紹介した。1ソースをベースに複数スマートフォンのネイティブアプリを作れるのはなかなか快感だ。公式サイトのDocsにはチュートリアルやテクニカルFAQなどの情報も充実している。コードを見ながら、実装を追ってみるのも良し。興味がある方はユーザ登録をおこなって、リファレンスをもとに、エミュレータや実機でいろいろ試してみてはいかがだろうか。

    関連記事

    関連サイト

    関連したタグ

    新着記事

    特設サイトの情報

      求人情報

      人気記事

      一覧

      イチオシ記事

      新着記事

      特別企画

      転職ノウハウ

      あなたの仕事適性診断

      4つの診断で、自分の適性を見つめなおそう!

      Heroes File ~挑戦者たち~

      働くこと・挑戦し続けることへの思いを綴ったインタビュー

      はじめての転職診断

      あなたにピッタリのアドバイスを読むことができます。

      転職Q&A

      転職に必要な情報が収集できます

      スカウト転職する

      企業からアプローチのメッセージが届きます。

      マイナビニュースマガジン