Как использовать два разных хэша params на одной странице (Rails) - PullRequest
0 голосов
/ 21 января 2011

Привет Я хочу использовать два хэша params на одной странице

Работа на этой странице проста, это страница редактирования, и я хочу, чтобы она отправляла уведомления на сервер, как только работа по редактированию будет завершена.

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

Не удивительно, что параметры в sendnotification также включают параметры, используемые для обновления

и сервер возвращает 104 ошибки

Таким образом, Я пытался

new_params=Hash[]

и использовать new_params для замены старых параметров в sendnotification

Но тогда рельсы жалуются

 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 ]

1 голос
/ 22 января 2011

Хорошо, пожаловавшись на ваше форматирование, я полагаю, мне следует попытаться решить вашу проблему.

Этот код:

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?

0 голосов
/ 22 января 2011

Ладно ... поиграв с консолью rails некоторое время, я наконец-то нашел решение этой проблемы.

В методе sendnotification я создал новый хеш

    p=Hash[]

, но простое его использование не будет работать, как я упоминал ранее.Затем я изменил все p [: key] на p ["key"], и это работает.

Очевидно, что Hash # sort не работает с хешем [: key], если хеш создается заново, но работает с параметрами, и это меня озадачило и заставило поверить, что есть разница между параметрами и обычным хешем.

Я использую Ruby 1.8.7, поэтому я думаю, что это просто ошибка этой версии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...