Because you've got an ajax form. The javascript that serializes the
form for you doesn't know which submit was clicked (unlike the browser
code that would run with a normal form), and so it will have the
commit parameter in twice (once with each value) and rails will
discard one of them. You could probably use submit_to_remote with an
appropriate
:with option to do this.
I have a form with two submit buttons: "Save" and "Preview". In my
controller for this form, I do different things based on
params[:commit]. But somehow the params[:commit] always evals "Save",
even when I click Preview button. Why? any idea will be appreciated.
Because you've got an ajax form. The javascript that serializes the
form for you doesn't know which submit was clicked (unlike the browser
code that would run with a normal form), and so it will have the
commit parameter in twice (once with each value) and rails will
discard one of them. You could probably use submit_to_remote with an
appropriate
:with option to do this.
Fred
Thanks Fred. I haven't try using submit_to_remote, but I think you are
right.
I just changed the form back to normal form without ajax. This time the
"Publish" button works correctly but the "Save" button behaves weird.
The first time I click it, it saves the post. But after the post is
saved, if I click save again it will "Publish" the post. Why?
This is my controller:
def create
if params[:post][:id] != ""
@post = Post.find(params[:post][:id])
@post.update_attributes(params[:post])
else
@post = Post.new(params[:post])
end
if params[:commit] == 'Publish'
@post.published = true
if @post.save
flash[:notice] = 'Post was successfully published.'
redirect_to posts_path
else
render :action => :new
end
else
@post.published = false
if @post.save
flash[:notice] = 'Post was successfully saved.'
render :action => :new
else
render :action => :new
end
end
end