基于active_resource的类:
Contact.search(:email => ['bar@foo.com','foo@bar.com'])
会产生这个:
?email[]=bar@foo.com&email[]=foo@bar.com
我正在使用的特定API需要:
?email=bar@foo.com&email=foo@bar.com
所以,我发现:
ActiveResouce调用:
# Find every resource
find_every(options)
调用:
# Builds the query string for the request.
def query_string(options)
"?#{options.to_query}" unless options.nil? || options.empty?
end
所以,如果我更新:
class Array
# Converts an array into a string suitable for use as a URL query string,
# using the given +key+ as the param name.
#
# ['Rails', 'coding'].to_query('hobbies') # => "hobbies%5B%5D=Rails&hobbies%5B%5D=coding"
def to_query(key)
prefix = "#{key}[]"
collect { |value| value.to_query(prefix) }.join '&'
end
end
到此:
class Array
# Converts an array into a string suitable for use as a URL query string,
# using the given +key+ as the param name.
#
# ['Rails', 'coding'].to_query('hobbies') # => "hobbies%5B%5D=Rails&hobbies%5B%5D=coding"
def to_query(key)
prefix = "#{key}"
collect { |value| value.to_query(prefix) }.join '&'
end
end
它有效!!但是我不是特别高兴重新定义Array.to_param,因为这可能有无法预料的问题,特别是因为这个插件需要在rails中工作。
还有其他方法可以修补我的版本吗?
答案 0 :(得分:2)
我肯定会建议不要修补像这样的数组方法猴子。如果您只有一个模型,是否可以覆盖搜索方法?
class Contact
def self.search(options={})
super(options).gsub('[]','')
end
end
答案 1 :(得分:0)
由于此行为是我使用的API的标准,我能够将此补丁添加到我的ActiveRecord :: Base类。
def query_string(options)
begin
super(options).gsub('%5B%5D','')
rescue
end
end
感谢Beerlington指出我正确的方向。