如果继承了 rails 控制器,则覆盖 permited_params

Overwrite permited_params if rails controller has been inherited

举个例子:

class Base<ApplicationController
  private

  def permited_params
    params.require(:object_name).permit(:name, :description)
  end
end

class Post<Base
  private

  def permited_params
    params.require(:post).permit(:name, :description, :owner)
  end
end

我在创建呼叫操作时遇到错误 ActiveModel::ForbiddenAttributesError。我如何覆盖这个 permited_params

参数,一般来说,有一个很好的存在理由,并确保不是所有的东西都可以保存到你的数据库中。但是,如果您想允许所有参数,您可以调用

params.require(:post).permit! 

如果您只想更改参数,您可以更改属性名称。

params.require(:post).permit(:name, :description, :some_you_want, some_more ) etc. 

一般来说,您应该将所有要保存的参数添加到允许的参数列表中。因此,您要确保所有要保存的属性都将被存储,不会再有。您可以在每个控制器中设置 permitted_params。您不需要将其称为允许的参数。例如,您可以在 posts_controller 中这样调用它:

def create
  @post = Post.new(post_params)
  #.... your code
end

private 
def post_params 
  params.require(:post).permit(:name, :description, :owner)
end

这也适用于继承的控制器。

而不是params.require(:post).permit(... 你可以使用任何你想要的参数,比如 params.require(:reply).permit(... 如果所需的参数不可用,则会抛出错误。所以你需要确保它存在,例如

@post = Post.new 

其他参数可选,默认不会报错。