私は ror で Web を開発しており、コメントを ajax しようとしました。Web には、コメント付きのブランドと製品があります。最初に、ブランドのコメントを ajax してみました。
ブランドのモデル
class Brand < ActiveRecord::Base
attr_accessible :name
has_many :products, :dependent => :destroy
has_many :comments, :dependent => :destroy
validates :name, :presence => true
end
コメントのモデル
class Comment < ActiveRecord::Base
attr_accessible :body, :brand_id, :product_id, :user_id
belongs_to :brand
belongs_to :product
validates :brand, :presence => {:unless => :product_id?, :message => "The comment must belongs to a brand or product"}
validates :product, :presence => {:unless => :brand_id?, :message => "The comment must belongs to a brand or product"}
validates :body, :presence => true
end
コメント コントローラーの作成
def create
@comment = Comment.new(params[:comment])
@brand = Brand.find(params[:comment][:brand_id])
respond_to do |format|
if @comment.save
@comments = @comment.brand.comments
format.html { redirect_to @brand, notice: 'Comment was successfully created.' }
format.json { render json: @comment, status: :created, location: @comment }
format.js { render @brand}
else
format.html { render action: "new" }
format.json { render json: @comment.errors, status: :unprocessable_entity }
end
end
end
ビュー/ブランド/_comments
<div class="well">
<%= simple_format comments.body %>
<%= link_to 'Edit', edit_comment_path(comments), :class => 'btn btn-mini btn-success' %>
<%= link_to 'Destroy', comment_path(comments), :method => :delete, :data => {:confirm => 'Are you sure?'}, :class => 'btn btn-mini btn-danger' %>
</div>
ビュー/コメント/create.js.rjs
$("#comments").html("<%= escape_javascript(render :partial => "comments", :collections => @comments) %>");
ビュー/ブランド/ショー
<h2>Comments</h2>
<div id="comments">
<%= render :partial => "comments", :collection => @comments %>
</div>
<p></p>
<div id="comment-form">
<%= form_for @comment, :remote => true do |f| %>
<%= f.hidden_field :brand_id %>
<div class="field">
<%= f.text_area :body, :size => "25x5"%>
</div>
<div class="field">
<%= f.submit 'Enviar comentario', :class => 'btn btn-success' %>
</div>
<% end %>
</div>
しかし、新しい製品を作成すると、ページがリロードされました。本当にありがとうございました!