Я думаю, что вы придерживаетесь неправильного подхода и слишком много думаете о 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.Хорошим источником информации является эта скринкаст .