У меня есть ContactsController, который выглядит следующим образом:
class ContactsController < ApplicationController
def create
@contact = Contact.new(contact_params)
if captcha?
ContactMailer.potential_lead(@contact).deliver if @contact.save
else
@contact.errors.add(:base, 'Verify your humanity')
end
respond_with @contact
end
def thanks
@contact = 'success'
render file: '/layouts/contact'
end
private
def contact_params
params.require(:contact).permit(:name, :message, :interest, :email, :phone)
end
end
Нет проблем с ContactsController, представлениями, почтовыми программами и т. Д. Все работает нормально.Однако мне нужно добавить отдельную страницу, и я планирую использовать ContactsController для обработки формы.Поэтому я создал новое представление в Layouts под названием widget.
Идея заключается в том, что, когда кто-то заполняет контактную форму на странице виджета, появляется скрытое поле, которое обрабатывает интерес и просто использует почтовый контакт и т. Д.
Однако я сталкиваюсь с некоторыми проблемами.На мой взгляд, у меня есть:
=content_for :body do
.container
.row
.col
=render partial: '/shared/widget_form'
Затем в моей части:
=tb_form_for @contact, remote: true, data: {errors: :inline, success: thanks_path } do |f|
.row
.col
= tb_form_errors(f.object, :base)
.row
.col
=f.text_field :name, class: 'form-control', placeholder: 'Name', required: true
Затем я обновил свои маршруты, чтобы иметь
resources :contacts, only: [:create]
match 'widget' -> 'contacts#create', via: :post
Однако я в конечном итоге
Первый аргумент в форме не может содержать ноль или быть пустым
Я подумал, может быть, это проблема с созданием сообщения, хотя я хочу опубликовать в Контактах> Создать, ноЯ изменил это, чтобы получить и в итоге:
параметр отсутствует или значение пусто: contact
Поэтому я подумал, что, вероятно, использую сопоставление неправильно, поэтому яя просто сделаю:
get 'widget', to: 'contacts#create', as: :widget
Затем я обновил свою форму, чтобы иметь:
=tb_form_for @contact, url: widget_path, remote: true, data: {errors: :inline, success: thanks_path}
И я все еще получаю
, параметр отсутствует илизначение пусто: контакт
Что мне не хватает?Я просто хотел бы повторно использовать метод на другой странице.
РЕДАКТИРОВАТЬ: Если я использую:
=tb_form_for Contact.new
Это работает .... но это похоже на чит.Есть ли способ обойти это?