Подтвердить что ты не робот

Первый аргумент в форме не может содержать 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....

Я нашел связанные ошибки, но ни одно из решений, похоже, не соответствует моей конкретной проблеме. Любые подсказки к тому, что может быть причиной этого?

4b9b3361

Ответ 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

конец

Я раньше определял метод "новый" и "создать" и имел действие в них, которое обычно и я делаю в других случаях. Все еще не знаю почему.