如何在一个页面中使用两个不同的参数哈希(Rails)

时间:2011-01-21 20:02:50

标签: ruby-on-rails ruby

您好 我想在一页中使用两个参数哈希

这个页面的工作很简单,它是一个编辑页面,我希望它在编辑工作完成后向服务器发送通知。

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'

所以我在想是否有办法创建另一个参数?

提前致谢

2 个答案:

答案 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,所以我认为它可能只是这个版本的错误。