Rails: Too Few Arguments

28,116

You forgot to write responds_to block:

def update
  @holder = Holder.find(params[:id])
  if @holder.update_attributes(params[:holder])
    respond_to do |format|
      format.html { redirect_to holders_path } #, flash[:success] = "holder updated")
      format.js
    end
  else
    render 'edit'
  end
end

But I am suspicious about your index.html.erb, I don't think that will really work the way you think.

Share:
28,116
Noah Clark
Author by

Noah Clark

I like you.

Updated on June 30, 2020

Comments

  • Noah Clark
    Noah Clark almost 4 years

    I am trying to get some Javascript working in my Rails app.

    I want to have my index page allow me to edit individual items on the index page, and then reload the index page upon edit.

    My index.html.erb page looks like:

    <div id="index">
    <%= render 'index' %>
    </div>
    

    In my index.js.erb I have:

    $('#index').html("<%=j render 'index' %>");
    

    and in my holders_controller:

    def edit
      holder = Holder.find(params[:id])
     end
    
    def update
      @holder = Holder.find(params[:id])
      if @holder.update_attributes(params[:holder])
        format.html { redirect_to holders_path } #, flash[:success] = "holder updated")
        ## ^---Line 28 in error
        format.js
      else
        render 'edit'
      end
    end
    

    When I load the index page it is fine. As soon as click the edit button and it submits the form, I get the following:

    enter image description here

    But if I go back and refresh the index page, the edits are saved. What am I doing wrong?

  • Noah Clark
    Noah Clark almost 12 years
    @Matzi I had to use responds_to do |format| to get it to work.
  • Noah Clark
    Noah Clark almost 12 years
    @Matzi, Also. It works, kinda. Since it redraws the page, it's probably not any better than just reloading the page. The only way would be if I could figure out how to redraw just that one item. In any case, I now understand how to do it in the future.
  • Matthew Brown
    Matthew Brown over 11 years
    Thanks, NoahClark, Matzi, and all.
  • Danny
    Danny almost 11 years
    Question: why does some code have respond_to and other code just have redirect_to and omit the respond_to do |format| block? Seems to work in both cases, most of the time...I imagine there is a default if no respond_to is present?
  • Matzi
    Matzi almost 11 years
    The respond_to is just a selector to let you answer based on the format of the request. If you leave it out completely it will return the default rendered view on any format type. In the question the problem was with the usage of format.html without respond_to.
  • Albert.Qing
    Albert.Qing about 8 years
    This error's description is too short to understand where is wrong.:(
  • Roshan
    Roshan over 4 years
    you're a time saver!