Ajax отправить форму, рельсы3 - PullRequest
2 голосов
/ 03 июля 2011

Обновление, исходя из того, что Фрэнк написал ниже:

В представлении моего поста для просмотра я имею:

<span id="commentsPartial">
<%= render 'comments' %>
</span>

В частичных комментариях у меня есть:

<% @comments.each do |comment| %>
    <%= comment.description %>
<% end %>
<br/>
<%= render '/comments/form' %>

В частичной форме у меня есть:

<%= form_for [@comment], :remote => true do |f| %>
  <% if @comment.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@comment.errors.count, "error") %> prohibited this comment from being saved:</h2>

      <ul>
      <% @comment.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= f.text_area :description, :class => "forms", :style => "width:80%;height:120px;"%>
  </div>
  <div class="actions" style="margin-top:10px;">
    <%= f.hidden_field :user_id, :value => current_user.id %>
    <%= f.hidden_field :post_id, :value => @post.id %>
    <%= f.submit :class => "button-style" %>
  </div>
<% end %>

Моя страница просмотров / комментариев / create.js.erb содержит:

$("#commentsPartial").html("<%= escape_javascript(render('comments')) %>");

Когда я отправляю новый комментарий - он успешно создан,Однако страница остается статичной.Когда я смотрю в firebug, я вижу, что создан комментарий, и на пост вызывается get, который возвращает успех - даже если страница не обновляется ... очень запутано

1 Ответ

2 голосов
/ 03 июля 2011

Я думаю, что вы придерживаетесь неправильного подхода и слишком много думаете о jQuery, а не о "пути рельсов", чтобы сделать это.Вы можете просто передать параметр :remote => :true в ваш form_tag или form_for, чтобы указать rails использовать ajax вместо этого.

Возможно, вы хотите вложить комментарий в другую модель (google: nested маршруты), а затему вас есть файл в

app / views / comments / create.js.erb, который выглядит примерно так:

$("#comments").prepend("<%= escape_javascript render(@comment) %>");  
$('#comments_count').html('<%= pluralize(@comment.image.comments.count, "Comment") %>');  
$("#comment_body").val("");
$("#comments .comment_body:first").effect("highlight", { color:"#D3ECF4"}, 3000);

здесь вы указываете, что нужно сделать, чтобы обновить представление в случае успеха.

в вашем контроллере вы можете просто использовать:

  def create
    @comment = Comment.create!(params[:comment])  
  end

и для просмотра что-то вроде:

<div id="comments">
    <%= render @comments %>
</div>


<% form_for [@image, Comment.new], :remote => true  do |f| %>
 <%= render 'comment_fields', :f => f %>
<% end %>

предполагается, что вы хотите прокомментировать изображение.

мой _comment_fields.html.erb частично выглядит так:

<p id="new_comment" class="add_comment">
  <%= f.hidden_field :user_id, :value => current_user.id %>
  <%= f.hidden_field :image_id, :value => @image.id %>
  <%= f.label :body, "leave a comment" %><br />
  <%= f.text_area :body, :rows => 5, :cols => 25 %>
</p>

<p>
  <%= f.submit "Add Comment" %>
</p>

Это способ rails для ненавязчивой обработки javascript.Хорошим источником информации является эта скринкаст .

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