Хороший способ увидеть, что происходит, - использовать Firebug и проверить сгенерированный HTML. Если у вас нет Firebug, получите его сейчас, это действительно бесценно.
Если вы создадите форму с помощью переменной экземпляра, вы получите что-то вроде:
<form id="new_ecard" class="new_ecard" method="post" action="/ecards">
Так что это создаст POST-запрос к действию /ecards
, которое является методом create (кстати, ваш комментарий над методом create должен быть POST ecards_url
, а не ecard_url
, если вы его не определили) в противном случае).
Однако если вы используете только символ :ecard
вместо переменной экземпляра, вы получите:
<form method="post" action="/ecards/new">
Поскольку вы не указали URL, он использует текущий. Это означает, что ваша форма будет называть себя в этом случае, и ничего не произойдет.
Все это происходит из-за всех так называемых магических Rails - соглашения о конфигурации. Но, как сказал Даниво, вы можете указать URL-адрес вручную и явно указать каждый параметр формы, если вы не хотите, чтобы это волшебство происходило за вас.