Здравствуйте.
Пытаюсь реализовать форму "Заказать звонок". Форма находится на каждой страницы. Делаю по методу "Модель без таблицы в БД". (Другого способа не нашел) Сразу возникли проблемы с тем что не смог привязать форму к объекту модели. Пришлось делать так (прочитал что так не рекомендуется делать)
= form_for Message.new do |f|
...
Если
= form_for @message do |f|
...
то ругается "First argument in form cannot contain nil or be empty", хотя в контроллере вроде все верно.
Собтвенно вопрос сейчас в другом. Можно ли сделать так, чтобы форма после отправки данных не перезагружала страницу? На данный момент он бросает на ту же страницу с которой отправляются данные только с POST, которой конечно же у меня нет.
Модель
class Message
include ActiveModel::Validations
include ActiveModel::Conversion
extend ActiveModel::Naming
attr_accessor :name, :phone
validates_presence_of :name
validates_format_of :phone, :with => /\A[0-9]{10}\Z/, :allow_blank => true, :allow_nil => true
def initialize(attributes = {})
attributes.each do |name, value|
send("#{name}=", value)
end
end
def persisted?
false
end
end
Контроллер
class MessagesController < ApplicationController
def new
@message = Message.new
end
def create
@message = Message.new(params[:message])
if @message.valid?
UserMailer.create_page(@page).deliver
flash[:notice] = "Message sent"
else
render :new
end
end
end
В роутах сделал пока resources :messages
С уважением.