Я использую Rails 3.2 и делаю свой первый Ajax-запрос.
Это мой код:
def create
@post = Post.find(params[:post_id])
@comment = Comment.new(params[:comment])
respond_to do |format|
if @comment.save
format.html {
redirect_to @post
}
format.js
else
format.html {
render 'posts/show'
}
format.js
end
end
end
Итак, я понимаю, что возвращаю шаблон js.
Итак, вопрос 1: действительно ли хорошая идея использовать этот подход вместо стандартной отправки json / receive json при вызове $ .ajax?
Мой create.js.erb:
$(".commentlist").append("<%= escape_javascript(render(:partial => @comment)) %>");
Работает отлично.
Но ... как я проверяю форму? (Без ajax работает отлично).
Я вижу, что js.erb похож на html.erb, но с js вместо html (я по-прежнему вижу это странно, я думаю, что проще использовать controller.coffee, но я тоже научусь так: )).
Итак, вопрос 2: Как я проверяю? Я вижу, что при вызове ajax я получаю весь html и два моих действия (@post и @comment).
Только для этого мне нужно изучить подход Rails для создания ajax:)
P.S: Мой _form.html.erb:
<%= form_for comment, :url => post_comments_path(comment.post), :remote => true do |f| %>
<% if comment.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(comment.errors.count, "error") %> prohibited this comment from being added:</h2>
<ul>
<% comment.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<%= f.hidden_field :post_id %>
<p>
<%= f.label :name %>
<%= f.text_field :name %>
</p>
<p>
<%= f.label :email %>
<%= f.text_field :email %>
</p>
<p>
<%= f.label :url %>
<%= f.text_field :url %>
</p>
<p>
<%= f.label :content %>
<%= f.text_area :content %>
</p>
<p class="no-border">
<%= f.submit "Post", :class => "button" %>
</p>
<% end %>