重构模型以删除 Rails 3 升级的proxy_options



我目前正在将 rails 应用程序从 2.x 升级到 3.1。

想知道是否有人可以帮助重构它以删除proxy_option代码(在 rails 3 中不再可用):

scope = Product.scoped({})
scope = scope.scoped( Product.allowed(options[:current_user]).proxy_options )
scope = scope.scoped( Product.for_country(options[:country_ids]).proxy_options ) if options[:country_ids]

其中一个作用域方法的示例包括:

  def allowed(user)
    where(:id => user.access_to(self.name))
  end

这可能是一个可能的解决方案: 现在"proxy_options"已被删除,是否有替代方案? 导轨

似乎代码正在构建一个SQL查询,而不是替换方法,您可能必须通过弄清楚每行试图做什么并使用Rails 3范围或Arel来替换概念以获得相同的结果。

也许复制 Rails 2.x 的输出 SQL 将其放入测试中,并确保 Rails 3 代码使用相同的参数生成相同的 SQL 查询。

最新更新