Rails:路由约束,如果找到记录

时间:2014-02-10 02:08:57

标签: ruby-on-rails ruby-on-rails-3 routing

如果在params中找到匹配,我想约束我的路线:

constraints :client_code => User.all.client_code.any? do
  get ":client_code" => "share#index", :as => :shares
  get ":client_code/:id" => "share#show", :as => :share
end

应该去哪些而不是User.all.client_code.any??我真的无法理解。

谢谢!的更新

我已经制作了一个像这样的约束对象:

class ClientCodeConstraint
  def initialize
    @users = User.all
  end

  def matches?(request)
    @users.where(:client_code => request).first
  end
end

并将constraints ...中的routes.rb行更改为:

 constraints ClientCodeConstraint.new do ...

我是否在正确的轨道上?我收到了这个回复:

undefined method `where' for #<Array:...

1 个答案:

答案 0 :(得分:0)

用这种方法解决了,但不知道它的效率如何:

def matches?(request)
  @users.each do |user|
    return true if request.path_parameters[:client_code] == user.client_code
  end
end