Rails:参数过少

42

我正在尝试在我的Rails应用程序中让一些Javascript工作。

我希望我的索引页面允许我编辑索引页面上的单个项目,然后在编辑后重新加载索引页面。

我的index.html.erb页面如下:

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

在我的index.js.erb文件中,我有:

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

并且在我的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

当我加载首页时,一切正常。但是一旦点击编辑按钮并提交表单,我会得到以下结果:

enter image description here

但是如果我返回并刷新首页,则编辑内容已保存。我做错了什么?

1个回答

129
你忘记写了 responds_to 块:
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

但我对你的index.html.erb有所怀疑,我认为它不会按照你的想法那样工作。


1
@Matzi 我不得不使用 responds_to do |format| 才能让它工作。 - Noah Clark
感谢NoahClark、Matzi和所有人。 - Matthew Brown
respond_to只是一个选择器,让您根据请求的格式进行回答。如果您完全省略它,它将在任何格式类型上返回默认呈现的视图。在问题中,问题出在使用format.html而没有使用respond_to - Matzi
这个错误的描述太短了,无法理解哪里出错了。:( - Albert.Qing
你真是个省时的工具! - Roshan
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接