This is the error message from the logfile:
Started POST "/stages" for 127.0.0.1 at 2011-04-02 23:22:18 -0500
Processing by StagesController#create as JS
Parameters: {"utf8"=>"✓", "authenticity_token"=>"ob37MMciudHqAnNXFoeofWyVfLnrTxlHfncyDsZLpsI=", "stage"=>{"project_id"=>"3", "name"=>"First"}}
User Load (1.1ms) SELECT "users".* FROM "users" WHERE ("users"."id" = 1) LIMIT 1
#<User id: 1, email: "[email protected]", encrypted_password: "$2a$10$qUbNGm6lZ366jRiE0vK0gOpxbGXD5JmfqWmH1lfLlCEC...", password_salt: "$2a$10$qUbNGm6lZ366jRiE0vK0gO", reset_password_token: nil, remember_token: nil, remember_created_at: nil, sign_in_count: 264, current_sign_in_at: "2011-04-03 04:12:24", last_sign_in_at: "2011-04-03 03:21:37", current_sign_in_ip: "127.0.0.1", last_sign_in_ip: "127.0.0.1", username: "test", f_name: "Test", l_name: "User", created_at: "2011-01-22 07:17:45", updated_at: "2011-04-03 04:12:24", invitation_token: nil, invitation_sent_at: nil, plan_id: 3, current_state: nil, confirmation_token: nil, confirmed_at: "2011-02-11 23:19:15", confirmation_sent_at: "2011-02-11 23:18:20">
Role Load (0.4ms) SELECT "roles".* FROM "roles" INNER JOIN "assignments" ON "roles".id = "assignments".role_id WHERE (("assignments".user_id = 1))
Completed 422 Unprocessable Entity in 302ms (Views: 0.2ms | ActiveRecord: 1.5ms)
Any ideas ?
This is the new & create actions in stage:
def new
@project = Project.new
respond_with(@project)
end
def create
#@project = current_user.projects.create(params[:project])
@project = current_user.projects.build(params[:project])
#@project.current_user = current_user
if @project.save
respond_with(@project, :status => :created, :location => @project) do |format|
flash.now[:notice] = 'Project was successfully created.'
format.html { redirect_to(@project) }
format.js { render :partial => "projects/show", :locals => {:project => @project}, :layout => false, :status => :created }
end
else
respond_with(@project.errors, :status => :unprocessable_entity) do |format|
format.js { render :json => @project.errors, :layout => false, :status => :unprocessable_entity }
format.html { render :action => "new" }
end
end
end
This is the form partial that creates the new stage:
<% stage ||= Stage.new
new_stage = stage.new_record? %>
<%= form_for(stage, :html => { :class=>"ajax-form", :id => "stage-ajax-form"}, :remote => true, :disable_with => (new_stage ? "Adding..." : "Saving...")) do |f| %>
<%= f.hidden_field :project_id %>
<%#= f.hidden_field :client_id, :value => @project.client.id %>
<div class="validation-error" style="display:none"></div>
<label for="stage_name"><span class="icon stage-icon"> </span></label>
<input type="text" class="name" size="20" name="stage[name]" id="stage_name" value="<%= stage.name %>" >
<%= f.submit(new_stage ? "Add Stage" : "Save", :class => "green awesome") %>
<% end %>
Turns out that it was this line that was causing this error:
@project = current_user.projects.build(params[:project])
I replaced the build
with create
and all works now.
The answer here is, that any error in you case will result in '422 Unprocessable Entity' when you're responding in JSON format. The reason is this line in your controller:
format.js { render :json => @project.errors, :layout => false, :status => :unprocessable_entity }
I.e. when the object has errors and you are responding in JSON format, you will always send the 422 status.
What you actually need is to make a further investigation why would your object have errors. And that could be anything. For example: when not persisting the @project, it may have caused a validation error, etc..
In that case your question is irrelevant and the accepted answer is misleading.
IMHO, you should either change the question, or update the answer.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With