レンダーにハマる
たとえば、
item_controller.rb に、
def new
@item = Item.new
@places = Place.find(:all) # B
end
def create
#
if @item.save
#
redirect_to :action => 'list'
else
render :action => 'new' # A
end
end
とかあって、view/item/new.rhtml に、
<% form_tag :action => 'create' do %>
<%= collection_select :item, :place_id , @places, :id, :name %> # C
<%= text_field :item, :name %>
<%= submit_tag 'submit' %>
<% end %>
とかあって、new のページで何も入力しないで送信ボタンを押す。検証が設定されていると、A によってレンダーされるのだけれど、ここで C で「 NoMethod Error 」が出てしまう。 B は、レンダーされるときには行われないってことらしい。
そんなこんなでちょっとハマる。ビューの側に B を書いておくのが面倒がないけれど、アジャイル本では「コントローラかヘルパーに書くべき」といった記述もある。コントローラだとレンダー前に同じ記述をするようになりそうなので、やはりヘルパーに書くのが無難なのかなとも。
| 固定リンク
コメント