form_for resources with :singular specified

I fully suspect that I'm missing the point here somewhere so I promise
I won't be offended if you tell me I'm being daft.

My application rents equipment ... not equipments. So I have the

  map.resources :equipment, :singular => :equipment_instance

  class Equipment < ActiveRecord::Base

  class EquipmentController < ApplicationController

The problem comes in my _form.haml partial that is used by new.haml
and edit.haml:

- form_for @equipment do |f|

This gives me an error saying "Only get and post requests are allowed.

I tried:

- form_for @equipment, equipment_instance_path(@equipment) do |f|

That gives the same error.

There has to be something better than:

- form_for @equipment, :url => (@equipment.new_record? ?
equipment_path : equipment_instance_path(@equipment)), :html =>
(@equipment.new_record? ? { :method => :post } : { :method => :put })
do |f|

Why does Rails not introspect correctly in this case?


Is it possible that you could avoid the problem by a better choice of
model/table name? The convention is to use a name that makes the code
read well in your language, in this case I presume English. So for
example you may have a table called items, which contains obviously a
number of items and if you find one of them it is an item. Similarly
another class can define has_many :items, belongs_to :item and so on
and it reads well. Equipment is not a word that fits this pattern.
One cannot have an equipment or many equipment, it just does not work.
An item in the table is not an equipment. As you use the term
equipment_instance you could use that as the table name or there may
be a better word. Think about how you or the specifier or end user
would refer to a number of these objects to give you ideas.