エラーメッセージを ajax フォームに表示しようとしています (コードはこの質問に基づいています):
posts_controller.rb:
def create
@post = current_user.posts.build(params[:post])
if params[:commit] == "Publish"
@post.status = "Published"
elsif params[:commit] == "Save Draft"
@post.status = "Draft"
end
respond_to do |format|
format.html do
if @post.save && @post.status == "Published"
flash[:success] = "Post published"
redirect_to @post
elsif @post.save && @post.status == "Draft"
flash[:success] = "Post saved as draft"
render 'edit'
else
render 'new'
end
end
format.js do
@post.save
end
end
end
投稿/create.js.erb:
<% if @post.errors.any? %>
alert('There are errors.');
<%= render :partial=>'js_errors', :locals=> { :target=> @post } %>
<% else %>
$('.busy').html('Saved.');
<% end %>
js_errors.js.erb:
<% target.errors.full_messages.each do |error| %>
$('.busy').append('<p><%= escape_javascript( error ) %></p>');
<% end %>
投稿/new.html.erb:
<%= form_for(@post, remote: true, :html => { :multipart => true }) do |f| %>
<%= render 'fields', f: f %>
<div class="form-actions">
<%= f.submit "Publish", class: "publish btn btn-primary pull-left" %>
<%= f.submit "Save Draft", class: "save-draft btn btn-default pull-left" %>
<div class="busy pull-left">
</div>
</div>
<% end %>
しかし、何らかの理由で何も表示されません (.busy
常に空のままです)。
js_errors.js.erb
コンソールでは、次のように表示されていることがわかります。
127.0.0.1 の POST "/posts" を 2013-01-04 18:02:18 +0800 で開始しました PostsController#create as JS パラメータによる処理: {"utf8"=>"✓", "authenticity_token"=>"Qfn6HsPPDxyB1t4bM/ OQKPbJ/aoAMkp74y0Z6xkoXCY=", "post"=>{"title"=>"", "content"=>"", "tag_list"=>""}, "_wysihtml5_mode"=>"1", "commit"= >"Save Draft"} User Load (0.7ms) SELECT "users".* FROM "users" WHERE "users"."remember_token" = 'ljl0ZsuoiHg0Jilz8bgy-g' LIMIT 1 (0.2ms) トランザクションの開始
(0.2ms) トランザクションのロールバックレンダリングされた posts/_js_errors.js.erb (3.8ms) レンダリングされた posts/create.js.erb (7.5ms) 25ms で 200 OK を完了 (Views: 11.2ms | ActiveRecord: 1.0ms | Solr: 0.0ms)
何が問題なのですか?
(フォームから削除すると、検証メッセージが表示されますremote:true
)。
編集:
alert('There are errors.');
トリガーされていないことに気付きました。変。