私のアプリケーションでは、ユーザーがコメント (クラス Newcomments) を投稿できるプロジェクトがあります。現在、投稿は素晴らしいですが、ページの更新中です。ページを更新せずに投稿できるように、AJAX/JQUERY を使用しようとしています。このrailscastsチュートリアルに従っています。
そのため、現在、投稿がデータベースに作成されており、ページが更新されていません。しかし、更新すると投稿が表示されます。特定のプロジェクトのコメントをレンダリングするページは、projects/_comments.html.erb にあります。
質問: 新しいコメントがレンダリングされるようにするには、どうすれば調整できますか?
newcomments_controller.rb
def create
@newcomment = @commentable.newcomments.new(params[:newcomment])
if @newcomment.save
respond_to do |format|
format.html { redirect_to comments_project_path(@commentable) }
format.js
end
else
render :new
end
end
ビュー/newcomments/_form.html.erb
<span class="comment">
<%= form_for [@commentable, @newcomment], remote: true do |f| %>
<%= f.text_area :content, rows: 3, :class => "span8" %>
<%= f.hidden_field :user_id, :value => current_user.id %>
<%= f.submit "Add Comment", :class => "btn btn-header" %>
<% end %>
</span>
ビュー/newcomments/create.js.erb
$('#newcomment').append('<%= j render(@newcomments) %>');
projects_controller.rb
def comments
@commentable = @project
@newcomments = @commentable.newcomments.newest.page(params[:comments_page]).per_page(10)
@newcomment = Newcomment.new
respond_to do |format|
format.html # show.html.erb
format.json { render json: @project.comments }
end
end
プロジェクト/コメント.html.erb
<%= render 'comments' %>
プロジェクト/_comments.html.erb
<%= render @newcomments %>
ビュー/newcomments/_newcomment.html.erb
<div class="comments">
<%= link_to newcomment.user.name %></strong>
Posted <%= time_ago_in_words(newcomment.created_at) %> ago
<%= newcomment.content %>
</div>
<span class="comment">
<%= form_for [@commentable, @newcomment] do |f| %>
<div class="field">
<%= f.text_area :content, rows: 3, :class => "span8" %>
</div>
<%= f.hidden_field :user_id, :value => current_user.id %>
<div class="actions">
<%= f.submit "Add Comment", :class => "btn btn-header" %>
</div>
<% end %>
<% unless newcomment.newcomments.empty? %>
<%= render @newcomments %>
<% end %>
</span>