params[:commit] doesn't work

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

Frederick Cheung wrote:

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

Have you looked in your logs to see what is being submitted ? (ie is the browser doing something weird or is it your code ?)

Fred