AdilA
@AdilA
Нравится кодить, изучаю go c echo

Как разделить два атрибута params в rails?

Делаю range фильтр по совету сообщества столкнулся с проблемой поиска а именно не пойму как разбить params на 2 аттрибута

форма

<%= form_tag @sub_category, method: 'get' do |d| %>
<%= text_field_tag "diameter[]", nil, id: "ex2", :data => {'slider-min' => '1','slider-max' => '1000','slider-step' => '5','slider-value' => '[250,450]' } %>
<%= submit_tag 'Save' %>
<% end %>

Контроллер
def show
        @sub_category = SubCategory.friendly.find(params[:id])
        @items = @sub_category.items
        @items = @sub_category.items.where("size >= ?", params[:diameter].first) if params[:diameter].present?
        @items = @sub_category.items.where("size <= ?", params[:diameter].last) if params[:diameter].present?
        @items = @items
    end


то что приходит с формы

Processing by SubCategoriesController#show as HTML Parameters: {"utf8"=>"✓", "diameter"=>["21,451"], "commit"=>"Save"

вот как разделить "diameter"=>["21,451"] на 21 и 451 не пойму подскажите пожалуйста
first last each ничего не помогает
  • Вопрос задан
  • 2317 просмотров
Решения вопроса 3
viktorvsk
@viktorvsk
Не знаю, какую задачу решаете, зачем вам рендж, что посоветовало сообщество...
Но если нужно из "diameter"=>["21,451"] сделать 21 и 451 то:
vals = params[:diameter].first.split(',') # [21,451]
val1 = vals.first # 21
val2 = vals.last # 451


Но вообще, кажется, что что-то в корне неверно
Ответ написан
Prognosticator
@Prognosticator
TODO: Здесь будут ворованные умные мысли, типа мои
Привет, Адиль.
все верно в ответе Виктора.
@items = @sub_category.items.where("size >= ?", params[:diameter].first) if params[:diameter].present?
@items = @sub_category.items.where("size <= ?", params[:diameter].last) if params[:diameter].present?

Как ты думаешь, что в итоге будет лежать в @items ?
И зачем эта конструкция @items = @sub_category.items?
А эта зачем @items = @items ?
Ответ написан
Able1991
@Able1991
Пишу на рельсах
Во первых уберите [] на форме, что бы у вас не приходил массив из одной строки
потом разделяйте строку по запятой как говорили выше
ds = params[:diameter].split(','),
потом ищите записи
@items = @sub_category.items.where( :size => [ds.first..ds.last])

и тут место @sub_category.items, если мне не изменяет памят можно использовать просто @items полученый вами строкой выше
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы