我正在将Rails 3应用程序迁移到Rails 4,我正在将attr_accessible属性转换为控制器中的强参数.该API文档显示为"许可"的属性如何:
def person_params
params.require(:person).permit(:name, :age)
end
Run Code Online (Sandbox Code Playgroud)
但是,我的绝大多数属性都是质量分配安全的.这是只有少数属性,如:account_id和:is_admin我需要的黑名单.
是否可以将属性列入黑名单而不是将几乎所有属性列入白名单?例如:
def user_params
params.require(:user).exclude(:account_id, :is_admin)
end
Run Code Online (Sandbox Code Playgroud) 在Elixir中,我如何记录函数将返回实现特定行为的模块?
要使用一个简单的例子,假设我创建了一个GreeterBehaviour由两个模块实现的行为:
defmodule GreeterBehaviour do
@callback say_hello(String.t) :: String.t
end
defmodule FormalGreeter do
@behaviour GreeterBehaviour
def say_hello(name) do
"Good day to you #{name}"
end
end
defmodule CasualGreeter do
@behaviour GreeterBehaviour
def say_hello(name) do
"Hey #{name}"
end
end
Run Code Online (Sandbox Code Playgroud)
然后,我想通过函数检索Greeter,轻松地换掉这些实现中的任何一个:
defmodule MyApp do
def main do
greeter().say_hello("Pete") |> IO.puts
end
@spec greeter() :: GreeterBehaviour # This doesn't work with dialyzer
def greeter do
FormalGreeter # Can easily be swapped to CasualGreeter
end
end
Run Code Online (Sandbox Code Playgroud)
Dialyzer将成功检查两者CasualGreeter并FormalGreeter正确实现该GreeterBehaviour行为.但是,我如何定义一个typespec,以便Dialyzer检查 …