小编Pet*_*ete的帖子

Rails 4强参数:我可以'排除'/ blacklist属性而不是permit/whitelist吗?

我正在将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)

ruby ruby-on-rails ruby-on-rails-4

10
推荐指数
2
解决办法
8571
查看次数

如何使用typespecs和Dialyzer with Behaviors?

在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将成功检查两者CasualGreeterFormalGreeter正确实现该GreeterBehaviour行为.但是,我如何定义一个typespec,以便Dialyzer检查 …

elixir

10
推荐指数
1
解决办法
607
查看次数

标签 统计

elixir ×1

ruby ×1

ruby-on-rails ×1

ruby-on-rails-4 ×1