小编And*_*phy的帖子

Rails ActiveRecord在一个查询中执行Group,Sum和Count

我有两张桌子,

Order (ID, Value)
Run Code Online (Sandbox Code Playgroud)

OrderType (ID, Name [Quote, Sale, Purchase, etc])
Run Code Online (Sandbox Code Playgroud)

我想获得每种类型(计数)的订单总数以及每种类型的订单总数(总和)

我可以单独使用这些

Order.group(:order_type).count(:id)
Run Code Online (Sandbox Code Playgroud)

Order.group(:order_type).sum(:value)
Run Code Online (Sandbox Code Playgroud)

我想在一个查询中执行这些,相当于以下SQL

SELECT
  order_types.id, Count(*) as total_count, Sum(orders.value) As total_value
FROM
  order
JOIN
  order_types ON orders.order_type_id = order_types.ID
GROUP BY
  order_types.id
Run Code Online (Sandbox Code Playgroud)

查询还应返回完整OrderType对象,以便在视图中显示名称

ruby ruby-on-rails rails-activerecord

12
推荐指数
3
解决办法
3586
查看次数

ASP.Net MVC 4 w/AttributeRouting和多个RoutePrefix属性

TL; DR

我需要一种方法来根据我的MVC应用程序中的用户属性,在生成URL时以编程方式选择选择哪个RoutePrefix

不是TL; DR

我有一个MVC 4应用程序(使用AttributeRouting NuGet包)

由于托管环境的要求,我必须为我的许多操作设置两条路由,以便托管环境可以具有不同的访问权限.

我通过装饰我的控制器来解决这个问题[RoutePrefix("full")] [RoutePrefix("lite)].允许通过/ full/{action}和/ lite/{action}访问每个操作方法.

这非常有效.

[RoutePrefix("full")]
[RoutePrefix("lite")]
public class ResultsController : BaseController
{
    // Can be accessed via /full/results/your-results and /lite/results/your-results and 
    [Route("results/your-results")]              
    public async Task<ActionResult> All()
    {
    }

}
Run Code Online (Sandbox Code Playgroud)

但是,每个用户只应在其URL中使用full或lite,这取决于该用户的某些属性.

显然,当我使用RedirectToAction()@Html.ActionLink()它只会选择第一个可用的路线,并不会保留"正确"的前缀.

我想我可以覆盖该RedirectToAction()方法以及添加我自己的@Html.ActionLink()方法版本.

这将有效,但它将涉及一些讨厌的代码,我生成URL,因为我得到的是一个表示动作和控制器的字符串,但不是反映的类型.也可能有路由属性,例如在我的示例中,所以我将不得不复制许多内置代码的MVC.

对于我想解决的问题,有没有更好的解决方案?

c# asp.net-mvc asp.net-mvc-4 attributerouting

5
推荐指数
2
解决办法
1万
查看次数