Я использую Ruby on Rails 3 и у меня есть 2 приложения (APP1 и APP2), работающие на двух поддоменах:
- app1.domain.local
- app2.domain.local
и я пытаюсь запустить два последовательных HTTP-запроса GET от APP1 к APP2 следующим образом:
Код в APP1 (запрос):
before_filter :run_request
def run_request
response1 = Net::HTTP.get( URI.parse("http://app2.domain.local?test=first&id=1") )
response2 = Net::HTTP.get( URI.parse("http://app2.domain.local/test=second&id=1") )
end
Код вAPP2 (ответ):
before_filter :run_response
def run_response
respond_to do |format|
if <model_name>.find(params[:id]).<field_name> == "first"
<model_name>.find(params[:id]).update_attribute ( <field_name>, <field_value> )
format.xml { render :xml => <model_name>.find(params[:id]).<field_name> }
elsif <model_name>.find(params[:id]).<field_name> == "second"
format.xml { render :xml => <model_name>.find(params[:id]).<field_name> }
end
end
end
После первого запроса я получаю правильный XML (response1 - это то, что я ожидаю), но на втором - нет (response2 - не то, что я ожидаю).Выполняя некоторые тесты, я обнаружил, что во второй раз, когда <model_name>.find(params[:id]).<field_name>
запускается (для операторов elsif), он всегда возвращает пустое значение, так что код в операторе elseif никогда не запускается.
Возможно ли, что проблемаотносится к кешированию <model_name>.find(params[:id]).<field_name>
?
УВЕДОМЛЕНИЕ
Если я попробую этот код
respond_to do |format|
if <model_name>.find(params[:id]).<field_name> == "first"
<model_name>.find(params[:id]).update_attribute ( <field_name>, <field_value> )
format.xml { render :xml => <model_name>.find(params[:id]).<field_name> }
else
format.xml { render :xml => <model_name>.find(params[:id]) }
end
end
, response2 - это целый <model_name>.find(params[:id]
объект.Обратите внимание, что я удалил условие «elsif» (чтобы выполнить второй запрос, чтобы я мог получить response2) и изменил код с
format.xml { render :xml => <model_name>.find(params[:id]) }
на
format.xml { render :xml => <model_name>.find(params[:id]).<field_name> }
PS: я читал о eTag и условном GET , но я не уверен, что должен использовать этот подход.Я хотел бы, чтобы все было просто.