Как я могу отправить результаты из формы: remote => true в Rails 3 обратно на страницу? - PullRequest
0 голосов
/ 24 марта 2011

Это часть моего контроллера:

if @invite.save
      UserMailer.invite_email(@invite).deliver
      respond_with do |format|
        format.html do
          if request.xhr?
            render :text => "sent" , :layout => false
          else
            flash[:notice] = "Successfully created invite."
            redirect_to @invite
          end
        end
      end
    else
      render :action => 'new'
    end

Это мой вид:

<h3>Invite a Friend</h3>
<%= form_for @invite, :remote => true do |f| %>
  <%= f.email_field :recipient_email, :class => 'submittable' %></br>
  <%= f.submit %>
<% end %>

Что мне нужно сделать, чтобы, например, текст "отправлено"или что-то, что я положил туда, появляется прямо над формой в представлении?

Я пытался :update => :status, но это не сработало.

1 Ответ

2 голосов
/ 24 марта 2011

Короткий ответ: вы должны отправить обратно исполняемый JavaScript, а не просто отправлять текст обратно, как «отправлено».Используя ваш пример (и предполагая, что вы используете jQuery):

if request.xhr?
  render :text => "$('#invite_form').before('<div>Sent!</div>');" , :layout => false
else
  ...
end

(Убедитесь, что форма имеет id и используйте его вместо #invite_form.)

Так как выпри использовании remote: true в форме он должен автоматически выполнить ответ.В целом, я думаю, вам будет лучше, если немного очистить логику ответа и разделить ответ xhr на его собственный шаблон.Посетите эту страницу в разделе «Использование respds_with» , где приведены несколько замечательных примеров: http://asciicasts.com/episodes/224-controllers-in-rails-3

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...