2016-03-24 3 views
0

Супер простой, тупой вещь, которую я не могу понять, для более, чем через час в настоящее время:Самовольная PARAMS customer_ids

def user_params 
    params.require(:user).permit(customer_ids: []) # pg array column 
end 

Моя форма:

= f.select :customer_ids, 
    options_from_collection_for_select(customers, 'id', 'name', user.customer_ids), 
    { include_blank: 'Select customer', multiple: true, size: 15 }, 
    class: 'form-control' 

И при обновлении пользователя Я м получение

Unpermitted parameter: customer_ids 

Как это возможно в мире?

Parameters: {"utf8"=>"✓", "authenticity_token"=>"oCkUEi2pNajM0ydHUH2w6iYIq5eKjfCY5ig9U2qDTXxMqECCgQ2Dn9YtqkMqXlTmLl5q/OO8x23o/P50SnmgUg==", "user"=>{"customer_ids"=>"84"}, "commit"=>"Assign selected customer to user", "id"=>"2"} 
+0

'... разрешение (customer_ids: [])' это правильный синтаксис. Что-то еще происходит в вашем коде. Я предлагаю вам посмотреть в другом месте. Другая вещь, о которой я могу думать, это то, что по какой-то причине столбец не распознается как массив. – Mohamad

+0

попробуйте сделать это 'def user_params params.require (: user) .permit (: customer_ids => []) # pg array column end' –

+0

@Mohamad где? Я имею в виду, что я отлаживал его и все выглядело хорошо, но он либо говорит unpermitted params, либо, когда я перехожу к 'allow (: customer_ids)', он просто не обновляет 'customer_ids' –

ответ

2

Ваша форма не посылает в customer_ids параметры как массив.

"user"=>{"customer_ids"=>"84"} 

Именно по этой причине. Оно должно быть (обратите внимание на квадратные скобки):

"user"=>{"customer_ids"=>"[84]"} 

Если вы объявляете параметры как массив, он должен быть размещен в виде массива. Вероятно, это проблема в вашей форме.

Обычно я использую флажки для чего-то вроде этого, но это зависит от вашего пользовательского интерфейса. Вот что я сделал в прошлом.

= f.collection_check_boxes :customers, customers, :id, :name do |cb| 
    = cb.label 
    span.pull-right = cb.check_box 

Посмотрите на сборщики помощи в Rails. Многоселектор должен работать, но я не использовал его таким образом.

+0

oooo, правильно !!!!!! как я могу передать форму для отправки массива? –

+0

Он не может получить к нему доступ через '.permit (: customer_ids)' либо – RSB

+0

Пошел, чтобы получить моего сына в школу. Я посмотрю, когда вернусь. В противном случае моя жена убьет меня: D – Mohamad

0

Попробуйте изменить select тег как этот

= f.select(:customer_ids, customers.collect { |c| [ c.name, c.id ] }, 
          { prompt: "Select Customer"}, 
          { multiple: true, size: 5, class: 'form-control' }) 
+0

это все равно не отправит массив в params, к сожалению –

+0

Вы все еще получаете идентификаторы как строку в params? – RSB

+0

Это была моя первоначальная проблема, и я все еще делаю –

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