Ajax提交表单,rails3

时间:2011-07-03 14:46:01

标签: jquery ruby-on-rails ajax ruby-on-rails-3

更新,关闭弗兰克在下面写的内容:

在我的帖子的节目视图中,我有:

<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中观看时,我看到评论已创建,并且在帖子上有一个调用,它会返回成功 - 即使页面没有更新...非常困惑

1 个答案:

答案 0 :(得分:2)

我认为你正在遵循错误的方法并且想到太多的jQuery而不是“轨道方式”来做到这一点。 您可以将选项:remote => :true传递给form_tag或form_for,以告诉rails使用ajax。

您可能希望将评论嵌套到另一个模型中(google:嵌套路由),然后在

中创建一个文件

app / views / comments / create.js.erb whcih是这样的:

$("#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 %>

假设您想对图像发表评论。

my _comment_fields.html.erb partial然后看起来像这样:

<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的方式。一个很好的资源是this screencast