form_for

フォームを複数設置するとき、

いちいちコードを書いていてはDRYに反するので、
そんなときはform_forを使用して一括で記述する。

<h1>新しい商品</h1>

<% form_for(@product) do |f| %>
  <%= f.error_messages %>

  <p>
    <%= f.label :title %><br />
    <%= f.text_field :title %>
  </p>
  <p>
    <%= f.label :description %><br />
    <%= f.text_area :description, :rows => 6 %>
  </p>
  <p>
    <%= f.label :image_url %><br />
    <%= f.text_field :image_url %>
  </p>
  <p>
    <%= f.label :price %><br />
    <%= f.text_field :price %>
  </p>

  <p>
    <%= f.submit '作成' %>
  </p>
<% end %>

<%= link_to '戻る', products_path %>

サーチフォームのボタンが改行してしまう。

iphoneで、サーチフォームのボタンが改行してしまう。
PCでは入力フォームとボタンが一行で表示されるのですが、iphoneだとボタンが改行されて表示されてしまいました。

こうなるはずが、


_________________________________

________________________________ [検索]

こうなってしまう。


_________________________________

________________________________

[検索]

対処法としては、formタグをテーブルで囲うことにしました。
更に、入力フォームと検索ボタンが密着して表示されるようalignで右揃え左揃えを指定しています。

<table><tr>
<% form_tag "foo/bar", {:method => :get} do %>
  <td align="right"><%= text_field_tag :q, params[:q] %></td>
  <td align="left"><%= submit_tag "検索", :id => "sbsbmtbtn", :alt => "検索" %></td>
<% end %>
</tr></table>

今回はこの方法で切り抜けましたが、画像サイズを画面に合わせてきっちりと指定し、改行させないようにするという方法もあります。

ActionHelperのsubmit_tagで値を渡す方法

form_tagでボタンが1つ以上ある場合、どのボタンを押されたか判断する場合、submit_tagを条件分作り、コントローラで受け取る値でどのボタンが押されたか判別する。

このとき、ボタン表示の文字とコントローラーに渡す値を別にしたい場合、具体的には、ボタン表示を「編集」や「削除」などの日本語にして、コントローラーに渡す引数を"edit"や"delete"にしたいという場合。

ずばり、:nameオプションを使用すればいい。

  • ビュー


<% form_tag('/hoge/foo', :method => :get)do %>
<%= submit_tag '編集', :name=>'edit' %>
<%= submit_tag '削除', :name=>'delete' %><% end %>

  • コントローラー


def foo
if params[:edit]
#'編集'ボタンを押された場合の処理
end
if params['delete']
#'削除'ボタンを押された場合の処理
end
end

Missing template にはまる。

共通部分を切り分けて、partial ファイルとして同じフォルダに保存し<%= render(:partial => "aaa/hoge") %>
としたところ、


Missing template エラー

が出た。

スペルミスもなく、パスは正しいしいはずなのでなんでかなぁ〜〜ill
と悩むこと暫し・・・

サーバーを再起動したらあっさり解決しました。