1. Эта форма отображается на каждой странице, следовательно переменная
@message так же должна быть установлена на каждой странице, а не только в контроллере
Messages. Т.е., если Вы отображаете эту форму на странице постов и конкретного поста, то в каком-нибудь
PostsController в методах
show и
index эта переменная должна быть так же определена.
2. Чтобы форма не перезагружала страницу, достаточно передать ей параметр
remote: true. А что сделать после сабмита, опишите в соответствующей JS вьюхе (к примеру
messages/create.js.erb)
= form_for @message, remote: true do |f|
...
Подробнее читайте здесь:
edgeguides.rubyonrails.org/working_with_javascript...