我正在用Phoenix编写查询,我需要检查字段在[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> VerifyDrinkingWater([System.Web.Http.FromBody] DrinkingWaterModel model)
{
var successAlert = new AlertModel();
var failureAlert = new AlertModel();
if (ModelState.IsValid)
{
List<string> successes = new List<string>();
List<string> failures = new List<string>();
foreach (var verifiable in model.Data)
{
if (verifiable.Verified != false)
{
verifiable.Verified = true;
verifiable.VerifiedDate = DateTime.Now;
verifiable.VerifiedBy = User.Identity.Name;
var result = await Manager.VerifyAsync(verifiable);
}
}
}
else
{
InvalidState(failureAlert);
}
//return the GET method to update and refresh the table
return await UnverifiedDrinkingWaterLog(successAlert, failureAlert);
}
中。
例如falsey
令我惊讶的是,那里没有太多关于如何惯用地检查e剂中的where(query, [x], x is not true)
或falsey
的信息。
只是为了更加清楚一些伪代码:
not true
答案 0 :(得分:3)
我正在凤凰城写一个查询
首先没有“在 Phoenix 中查询”之类的东西。查询(在这种情况下)都是关于与数据库对话,而 Phoenix 基本上可以不关心数据库。一个人可能拥有一个完美的 Phoenix 项目,该项目没有数据库。
您要查询的是Ecto
,使用Ecto.Query
。
例如
where(query, [x], x is not true)
谈论数据库,这样的查询有点道理。数据库自然没有falsey
的概念,它们区分false
和NULL
,甚至SQL语法也这么喊。要找到false
,应该这样做:
WHERE x = FALSE -- or WHERE x = 0
并用于查找NULL
WHERE x IS NULL
也就是说,如果您在数据库中查找 FALSE或NULL 都没有问题,则说明数据库设计存在问题,肯定会在以后给您带来麻烦。
OTOH,在Elixir本身中,这个问题完全正确。我们有两个falsey
项:原子false
和nil
。其他所有内容均视为truthy
值。
要进行检查,应使用Kernel.!/1
if !x, do: IO.puts("#{x.inspect} is truthy")
答案 1 :(得分:1)
您可以执行以下操作:
x = false
if x do
"truthy"
else
"falsey"
end
=> "falsey"
如果"falsey"
也将返回x = nil
。其他所有内容都会返回"truthy"
速记:if x, do: "truthy", else: "falsey"