Как передать гибкое количество идентификаторов в контроллер в Rails? - PullRequest
2 голосов
/ 12 января 2009

Я бы хотел отобразить страницу сравнения, чтобы пользователь мог сравнить свойства нескольких объектов в моей базе данных. Можно сравнить любое количество объектов. Я также хотел бы, чтобы это было в закладки (так что «получить»).

Как мне структурировать мой URL / маршрут для контроллера?

Что-то вроде / foo_compare / 1_5_22, где я разделил идентификаторы на 1, 5 и 22 в контроллере?

Может быть, / foo_compare / 1/5/22, но как мне настроить маршрут?

Ответы [ 4 ]

5 голосов
/ 12 января 2009

Я бы предпочел

/compare?a=1&b=5&c=22

1_5_22 просто бесполезно, и я думаю, что

/compare/1/5/22

- это маршрут без RESTful.

4 голосов
/ 12 января 2009
# routes.rb
map.connect 'compare/*:comparisons', :controller => 'whatever', :action => 'you_name_it'

# in the controller
ids = params[:comparisons].split('/')

Это соответствует, например, /compare/1/5/203.

4 голосов
/ 12 января 2009
a) url_for(:controller => "my_controlelr",:action => "compare", :id => [1,2,3,4]) becomes "id"=>"1/2/3/4"

ссылка будет my_controlelr / compare / 1/2/3/4

b) url_for(:controller => "my_controlelr",:action => "compare", :ids => [1,2,3,4]) becomes "ids" => ["1", "2", "3", "4"]

ссылка будет my_controlelr / compare /? Ids [] = 1 & ids [] = 2 & ids [] = 3 & ids [] = 4

Никаких специальных маршрутов не требуется

1 голос
/ 14 января 2009

Хотя мне не нравятся подчеркивания, я считаю разумным подход с разделителями. Я бы наверное использовал ';'

Логически, это набор идентификаторов, выставлять их в виде ряда параметров не стоит, если вы действительно не хотите установить ограничение на их количество

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