Rails3 如何在命名范围内使用 :params? [英] Rails3 How can I use :params in named scope?

查看:58
本文介绍了Rails3 如何在命名范围内使用 :params?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试显示特定订单的里程碑列表.(订单有很多里程碑.)

I'm trying to display a list of milestones for a particular order. (Orders have many milestones.)

在我的订单模型中,我有这个:

In my orders model, I have this:

scope :open, lambda { 
     joins("join milestones on milestones.order_id = orders.id").
      where("order_id = ? AND milestone_status = ?", :params[:order_id], true).
      group("orders.id")
    }

我遇到的问题是让当前订单 ID 生效 - :params[:order_id] 显然是错误的.

The problem I'm having is getting the current order ID to work - :params[:order_id] is clearly wrong.

在我的路线中,我有这个:

In my routes I have this:

resources :orders do
     resources :milestones
  end

我的网址如下:

http://127.0.0.1/orders/2/milestones

这怎么可能?我已经通过手动替换为订单 ID 来测试范围.

How is this possible? I have tested the scope by replacing with an order ID manually.

-- 编辑 --

根据以下建议,我已将以下内容放入里程碑控制器:

As per advice below, I've put the following in my milestones controller:

@orders = Order.open( params[:order_id] )

在我看来,我有这个:

<% @orders.each do |open|%>

<% @orders.each do |open| %>

但我收到一个错误:

wrong number of arguments (1 for 0)

完整的堆栈跟踪在这里:http://pastie.org/2442518

The full stacktrace is here: http://pastie.org/2442518

推荐答案

这样定义:

scope :open, lambda { |order_id|
 joins("join milestones on milestones.order_id = orders.id").
  where("order_id = ? AND milestone_status = ?", order_id, true).
  group("orders.id")
}

并像这样在您的控制器上调用它:

And call it on your controller like this:

def index
    @orders = Order.open( params[:order_id] )
end

这篇关于Rails3 如何在命名范围内使用 :params?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆