Ruby & Rails - конвертировать строку в процесс - PullRequest
1 голос
/ 13 марта 2011

Я в следующей ситуации.Текущий URL выглядит следующим образом:

/categories/Art

И я использую name = location.pathname.split('/')[2], чтобы получить часть URL Art.Затем я отправляю AJAX следующий путь назад к контроллеру: http://localhost:3000/sort?sortMethod=name&category=name или дату, в зависимости от того, на какую ссылку нажимают.

Теперь в моем контроллере я могу использовать sort = params[:category], чтобы получить строку name, но я хотел бы отсортировать по ней массив.@categories - это массив объектов, и я хотел бы вызвать .sort_by(&:sort), но он не распознает строковое значение sort = name.Так что теперь я хотел бы преобразовать эту строку в процесс для сортировки массива.Кто-нибудь знает, как мне это сделать?

Любая помощь очень ценится!

Ответы [ 3 ]

2 голосов
/ 13 марта 2011

Сначала преобразуйте его в символ, а затем используйте Symbol # to_proc:

@categories.sort_by(&sort.to_sym)

Однако убедитесь, что пользователи не могут вызывать что-либо вредоносное на ваших объектах, например:

http://localhost:3000/sort?sortMethod=destroy

Один из способов защитить себя - использовать attribute_accessible определений в вашей модели, а затем выполнить

@categories.sort_by(&sort.to_sym) if Category.accessible_attributes.include? sort.to_sym
0 голосов
/ 13 марта 2011

Кроме того, часть «Art» вашего URL доступна в хэше params Rails в виде params [: action], поэтому вам не нужно делать location.pathname.split ('/') [2].

0 голосов
/ 13 марта 2011

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

Category.all.sort_by {|category| category.method(params[:category]).call }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...