我的应用程序正在使用带有inherited_resources
的Rails 4。非常奇怪的是,update
操作似乎不起作用。当尝试在edit
页面上提交表单时,我收到了以下错误:
ArgumentError in Admin::FaqsController#update
wrong number of arguments (6 for 1)
表单中有6个字段。我的控制器是这样的:
class Admin::FaqsController < Admin::AdminController
inherit_resources
respond_to :html
actions :index, :new, :create, :edit, :update, :destroy
private
def resource_params
params.require(:faq).permit(:title, :slug, :body, :publish_immediately, :published_at, :status)
end
end
为什么会发生这种情况?它是否与Rails4不兼容,而我只需要自己执行update
操作?
好像我想明白了。我查阅了文件,发现我使用params许可证的方式不正确。我以为它被称为resource_params
和require
调用,但它如下:
class Admin::FaqsController < Admin::AdminController
inherit_resources
respond_to :html
actions :index, :new, :create, :edit, :update, :destroy
private
def permitted_params
params.permit(faq: [:title, :slug, :body, :publish_immediately, :published_at, :status])
end
end
不同之处在于,调用方法permitted_params
,并返回允许包含特定字段的整个params数组,而不是仅返回资源的字段。