Rails: Too Few Arguments

Noah Clark picture Noah Clark · Jun 26, 2012 · Viewed 25.9k times · Source

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?

Answer

Matzi picture Matzi · Jun 26, 2012

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.