Первый аргумент в форме не может содержать nil или быть пустым - Rails 4
Я получаю эту ошибку с моей контактной формой в рельсах:
First argument in form cannot contain nil or be empty
Просмотр:
<%= form_for @contact do |f| %>
and so on.......
контроллер
def new
@contact = Contact.new
end
and so on....
Я нашел связанные ошибки, но ни одно из решений, похоже, не соответствует моей конкретной проблеме. Любые подсказки к тому, что может быть причиной этого?
Ответы
Ответ 1
Сообщение об ошибке сообщает вам, что вы не можете иметь следующее:
<%= form_for nil do |f| %>
<%= form_for [] do |f| %>
Я предполагаю, что ваш @contact
установлен в nil
и что он не исходит из вашего действия Contact#new
.
FYI это просто сработает, если вы это сделаете:
<%= form_for Contact.new do |f| %>
Хотя не рекомендуется.
Вам нужно проверить, что представление, содержащее вашу форму, фактически отображается действием new
вашего ContactsController
.
Ответ 2
У меня была аналогичная проблема, когда у меня была форма в модальном, которая вносила изменения в модель, которая отличалась от той, что показывала фоновая страница. Несмотря на то, что у меня был необходимый @contact = Contact.new в моем контроллере контактов, мне нужно было добавить этот код в контроллер для фоновой страницы.
Например, у меня есть модель PhoneBook, и в моем индексном представлении для PhoneBook у меня есть модальная форма с добавлением контакта к моей модели контактов. Мне нужно @contact = Contact.new в моем методе индекса в моем контроллере PhoneBook:
class PhoneBook < ApplicationController
def index
@contact = Contact.new
...
end
end
И тогда форма внутри моего модала, отображаемая в PhoneBook index.html, имеет тот же синтаксис, что и другие, написанные другими:
<div id="phoneBook">
<div id="myModal" class="modal">
<%= form_for @contact do |f| %>
...
</div>
</div>
Ответ 3
Я знаю, что у этого есть принятый ответ, но это не решило мою проблему (я не хотел использовать новую в своем представлении), и я намерен опубликовать то, что разрешил мой.
Это всегда опечатка, вы можете проверить свои маршруты с помощью $rake routes
, если маршруты в порядке, чем где-то в другом виде.
В моем случае я пользовался возвышенным редактором, и у меня был дополнительный def выше def new в моем контроллере, я не знаю, как он туда попал, но он был там... Удалив его, я решил проблему после полчаса гвоздя ногтя... Там может быть любая типовая проблема, вызывающая эту проблему. Эта ошибка просто означает, что к новому методу не обращаются, если к нему обращаются, он инициализировал переменную.
Повторяю, всегда где-то опечатка.
Надеюсь, это поможет кому угодно.
Ответ 4
Если на самом деле ваша переменная экземпляра должна быть nil
, вы можете использовать
:contact
вместо @contact
и укажите путь.
В вашем случае код должен быть
<%= form_for( :contact , :html => {:class => "form-horizontal", :role => "form"}, url: login_path) do |form| %>
login_path
является просто примером и может быть заменен как видимый.
Ответ 5
Это может зависеть от того, где определено ваше новое или созданное действие. У меня была такая же проблема, оказалось, что мне пришлось поместить команду @Object = object.new внутри метода страницы.
Например..
class PagesController < ApplicationController
def home
@applicant = Applicant.new
end
def about
end
def homeowner
end
конец
Я раньше определял метод "новый" и "создать" и имел действие в них, которое обычно и я делаю в других случаях. Все еще не знаю почему.