Railsのメモ。

View

Viewのソースは以下のように書く。
form_tagメソッドは、前提となるモデルが存在しない時、つまり、モデルの編集目的でないときに、汎用的なフォームを生成するために利用する。

<h2>Form Example</h2>
<%= @msg %>
<hr/>
<%=form_tag({ :controller => samples, :action => hoge },
  { :method => :post, :id => sample}) do %>
  <%= text_field_tag :text1, , { :size => 25 } %>
  <%= submit_tag 送信 %>
<% end %>

Controller

上のViewのところでは、Controller => samplesとして、その中のどのアクションを実行するかを、
action => hogeで指定した。
Controllerのdef hogeメソッドが実行される。

#coding: utf-8
require kconv

class SamplesController < ApplicationController

  def hoge
    if request.post? then
      @msg = "typed:" + params[text1]
    else
      @msg = "please write some word"
    end
  end
end

実際にブラウザで見てみると、

typed:test

のように、入力した文字が表示される。


以下のようなエラーが出たら、日本語をコードに含んでいるパターンを疑ったほうがいいかもしれない。

We're sorry, but something went wrong

フォームを作るときに、以下のようなエラーが出た場合は、モデルにインスタンスが作られていないことを疑うとよい。

undefined method `model_name' for NilClass:Class

自分の場合は、

  def hoge
    @books = Book.all
    @book = Book.new
  end

みたいに書くことで、上記のエラーを回避できた。
allメソッドはテーブルからすべてのデータを取得するもので、テーブルの中身を無条件に取り出す場合に利用する。

その他、inputとかtextareaとか、いろいろな要素を生成できる。
xxxx_field,text_area,radio_button,check_boxメソッドなどがある。

# coding: utf-8
<h2>Form Example</h2>

<%= form_for(@book) do |f| %>
  テキストボックス:
  <%= f.text_field :isbn,
    { :size => 20, :maxlength => 25, :read_only => true } %><br/>

  ラジオボタン:
  <label><%= f.radio_button :publish, gihyo, { :class => rd } %>
    技術評論社</label>
  <label><%= f.radio_button :publish, shoei , { :class => rd } %>
    翔泳社</label>
  <label><%= f.radio_button :publish, mycomi , { :class => rd } %>
    マイコミ </label><br/>

  チェックボックス:
  <label><%= f.check_box :cd, { :class => chk }, yes, no %>
    isOK?</lable></br>

  電話番号:
  <%= f.telephone_field :isbn,
    { :size => 10, :maxlength => 15 } %><br/>

<% end %>

画面のキャプチャを見せたいところだけれど、使ったwindowsが壊れて、代わりにmacを使っていて、macのキャプチャソフトがよくわからんので載せられない。
しかし、ちゃんと動いているよ。

<参考文献>
・Ruby on Rails 3 アプリケーションプログラミング