Как вернуть True/False с помощью rails api?

мне нужно создать метод, который вызывается локальным приложением с двумя параметрами. как я могу вернуть true или false тогда? с xml? мой метод выглядит так:

def check_license
  app_id = params[:id]
  app_sn = params[:sn]

  @license = License.find_by_id(app_id)

  respond_to do |format|
    if @license.app_serial == app_sn
      # should return true here
   else
     # should return false here
   end
  end
end

заранее спасибо!


person trnc    schedule 01.12.2010    source источник


Ответы (3)


Сначала вам нужно определиться с форматом, в котором ваше другое внутреннее приложение будет вызывать это приложение. Популярные (и нормальные) форматы — xml или json.

Затем в вашем контроллере вам нужно отобразить ответ в каждом из этих форматов:

resp = @license.app_serial == app_sn
respond_to do |format|
   format.json { render :json => resp }
   format.xml do
      if resp
        head :ok
      else
        render :xml => resp, :status => 403 # that's a failed authentication response
      end
   end
end
person brycemcd    schedule 01.12.2010

Я считаю, что вы можете просто использовать:

def check_license
  app_id = params[:id]
  app_sn = params[:sn]

  @license = License.find_by_id(app_id)

  @license.app_serial == app_sn
end

Последняя строка в методе ruby ​​будет возвращаемым значением, поэтому метод здесь вернет результат этого последнего оператора отношения: либо истина, либо ложь.

Вам не нужно respond_to |format|, если вы даете один и тот же ответ для всех форматов, что, как я полагаю, так и есть, учитывая, что вы возвращаете логическое значение.

person Sam Ritchie    schedule 01.12.2010
comment
Благодарю. и как мне удалить ошибку «Шаблон отсутствует» при переходе по URL-адресу? - person trnc; 01.12.2010
comment
Смотрите мой ответ. Rails будет render шаблоном по умолчанию. Возможно, вам потребуется указать Rails render напрямую обращаться к объекту, а не через шаблон. Используйте render :json => value.to_json. - person yfeldblum; 01.12.2010

  respond_to do |format|
    @license.app_serial == app_sn
   end

Rails автоматически вернет результат последней выполненной строки.

person Gazler    schedule 01.12.2010