您好 我想在一页中使用两个参数哈希
这个页面的工作很简单,它是一个编辑页面,我希望它在编辑工作完成后向服务器发送通知。
def update
@description = Tempdescription.find(params[:id])
@description.update_attributes(params[:tempdescription])
sendnotification
end
def sendnotification
params[:to_ids]="xxxx"
sig = hash_params(params);
params[:sig] = sig
response = RestClient.post "http://api.xxxx.com/restserver.do", params, :content_type => :json, :accept => :json
render :text=>response
end
def hash_params(params)
params = Hash[*params.sort.flatten]
payload = ''
params.sort.each do |pair|
key, value = pair
payload = payload + "#{key}=#{value}"
end
return Digest::MD5.hexdigest(payload + API_SECRET)
end
发送通知中的参数还包括用于更新的参数
,这并不奇怪并且服务器返回104错误
因此, 我试过了
new_params=Hash[]
并使用new_params替换sendnotification中的旧参数
然后rails抱怨
undefined method `<=>' for :session_key:Symbol
app/controllers/tempdescriptions_controller.rb:72:in `<=>'
app/controllers/tempdescriptions_controller.rb:72:in `sort'
app/controllers/tempdescriptions_controller.rb:72:in `hash_params'
app/controllers/tempdescriptions_controller.rb:45:in `sendnotification'
所以我在想是否有办法创建另一个参数?
提前致谢
答案 0 :(得分:1)
好的,抱怨你的格式化,我想我应该冒险试图解决你的问题。
此代码:
def hash_params(params)
params = Hash[*params.sort.flatten]
payload = ''
params.sort.each do |pair|
key, value = pair
payload = payload + "#{key}=#{value}"
end
return Digest::MD5.hexdigest(payload + API_SECRET)
end
..似乎接受哈希作为其参数,然后使用已排序的键重新创建它。据推测,这段代码的目标是ruby 1.9,否则这将是毫无意义的。然后它会再次排序 ,我无法确定在使用=
加入密钥和值之前确定,但没有将对与&
分开。
但错误有点神秘;使用ruby 1.9排序符号没有问题。也许你正在运行ruby 1.8?
答案 1 :(得分:0)
好的...在玩了一段时间后使用rails console我终于找到了解决这个问题的方法。
在sendnotification方法中,我创建了一个新的哈希
p=Hash[]
但正如我之前提到的那样,简单地说这不会起作用。 然后我改变了一切 P [:键] 至 P [ “钥匙”] 它的工作原理。
显然Hash #sort不能与hash [:key]一起使用,如果哈希是新创建的,但是它与params一起工作,这让我感到困惑,让我相信params和普通哈希之间存在差异。
我正在使用Ruby 1.8.7,所以我认为它可能只是这个版本的错误。