2016-05-07 10 views
0

Извинения за основной вопрос, однако я совершенно новичок в Rails и пытаюсь отладить существующее приложение.Понимание параметров URL-адресов Rails

В частности, я пытаюсь перепроектировать по URL, учитывая следующий контроллер:

def find_by_foo 
    params.require(:foo).permit(:bar1, :bar2) 
end 

Маршрут следующим образом:

get 'find_by_foo', on: :collection 

И у меня даже есть спецификации:

it "should not be successful" do 
    get :find_by_foo, params: {foo: BarStuff} 
    expect(response).to_not be_success 
    expect(response).to have_http_status(401) 
end 

Я пытаюсь выяснить, как передать эти параметры через мой клиент REST. Я пробовал следующие структуры URL:

api/v1/collections/find_by_foo?foo={bar1: 0, bar2: 0} 
api/v1/collections/find_by_foo/foo/0/0 
api/v1/collections/find_by_foo?params={foo: {bar1: 0, bar2: 0}} 

Всеобъемлющее использование. Какая здесь правильная структура?

ответ

3

Вы имеете в виду это?

api/v1/collections/find_by_foo?foo[bar1]=0&foo[bar2]=0 

Обзор этого доступен в ActionController Overview

Вы можете также, в консоли, вызовите

app.find_by_foo_api_v1_collections_path(foo:{ bar1: 0, bar2: 0}) 

(или любой фактический метод URL хелпера, я просто гадание на основе маршрута), и вы получите CGI-экранированную версию пути, который вы можете использовать. Вы можете обернуть это в CGI.unescape(...) для удобства чтения. Например, в моем приложении:

2.2.2 > CGI.unescape(app.edit_many_ops_media_files_path(foo:{ bar1: 0, bar2: 0})) 
# => "/files/edit_many?foo[bar1]=0&foo[bar2]=0" 
0

Вы можете распечатать маршруты и фильтры по find_by_foo, чтобы увидеть правильную структуру. Запустить это в клемме:

$ rake routes | grep find_by_foo 

Надеюсь, это поможет.

+0

Спасибо. Да, однако это не говорит мне формат параметра. Это просто дает мне: '/api/v1/foos/find_by_foo(.:format) api/v1/foos # find_by_foo' – JB2

+0

Вы можете нажать на свой API, посетив этот URL: 'localhost: 3000/api/v1/foos/find_by_foo ', формат может быть .js, .html, .xml, .json зависит от вашей реализации в методе' find_by_foo' FoosController'. – juanitofatas

+1

Спасибо juanitofatas. Это был бы JSON. – JB2

Смежные вопросы