form_for с использованием: символ не работает, ошибка [Разрешены только запросы на получение, установку и удаление] - PullRequest
0 голосов
/ 21 октября 2009

При отправке формы для создания нового объекта я получаю сообщение об ошибке при отправке формы. Когда я использую ту же форму, но затем с переменной экземпляра, все, кажется, идет хорошо, какая-либо подсказка, почему не удается отправить с символом:?

Сообщение об ошибке гласит: разрешены только запросы get, put и delete.

Код для новой формы с символом:

<% form_for :ecard do |f| %>
    <%= label(:ecard, :title) %><br/>
    <%= f.text_field :title, :tabindex => "1" %>
    <%= f.submit "Create Ecard" %>
<% end %>

Форма идет хорошо , когда я использую

<% form_for @ecard do |f| %>
    <%= label(:ecard, :title) %><br/>
    <%= f.text_field :title, :tabindex => "1" %>
    <%= f.submit "Create Ecard" %>
<% end %>

Какой-то код из моего контроллера :

# GET new_ecard_url
# return an HTML form for describing the new ecard
def new
    @ecard = Ecard.new
end

# POST ecard_url
def create
    # create an ecard
    @ecard = Ecard.new(params[:ecard])
    if @ecard.save
        flash[:notice] = "Succesfully created a new Ecard"
        redirect_to :action => 'index'
    else
        flash[:warning] = "Error when saving Ecard"
        render  :action => 'new'
    end
end

Ответы [ 2 ]

1 голос
/ 21 октября 2009

Если первый аргумент является символом, он описывает объект, о котором написана форма, и присваивает имя переменной экземпляра, а затем необходимо указать URL-адрес.

Можно использовать реальный объект, а затем он будет использовать ваши маршруты, чтобы попытаться определить URL. Это означает, что он должен знать new_ecard_path и edit_ecard_path .
Он будет смотреть на объект и смотреть, является ли это новая запись, чтобы определить, какой использовать.

Если вы используете маршруты ресурсов с маршрутами отдыха по умолчанию, то вы, вероятно, можете просто использовать объект экземпляра. Если вам нужно указать URL-адрес, на который направляется форма, используйте символ и укажите URL-адрес.

Есть несколько примеров на http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html

0 голосов
/ 21 октября 2009

Хороший способ увидеть, что происходит, - использовать 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-адрес вручную и явно указать каждый параметр формы, если вы не хотите, чтобы это волшебство происходило за вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...