дублирование активного администратора has_one внутри формы выбора

Ввод моего активного кода администратора дает мне выбор всех дублированных адресов. Мне нужны адреса без дублирования внутри формы выбора введите здесь описание изображения

в случае нового

  <%= form_for @case,:url => {:action => :create, :id => @user.id} do |f| %>
    Address:<br>
    <%= f.select :address, options_for_select(@user.addresses.all.pluck(:name,:id), @case.address&.id) %><br><br><br>
      Patient First Name:<%= f.text_field :pt_first_name, class: "textbox" ,required: "required" ,placeholder: "Patient Name"%>
      Patient Last Name:<%= f.text_field :pt_last_name, class: "textbox" ,required: "required" ,placeholder: "Patient Name"%>
<% end %>

в активном админке case.rb

ActiveAdmin.register Case do
permit_params  :user_id, :product_ids,:step_ids  , :pt_first_name,:pt_last_name, 
:date_received, :due_date, :shade, :mould, :upper_lower,:invoice,:implant_brand, :implant_quantity,address_attributes: [ :name]

    form do |f|
            f.inputs do
                f.input :user
                f.inputs "address", for: [:address, f.object.address || Address.new] do |meta_form|
                meta_form.input :name, :as => :select, :collection => Address.order(name: :desc).collect {|address| [address.name, address.id] }
            end
             
            f.input :pt_first_name
            f.input :pt_last_name

person nourza    schedule 08.12.2020    source источник


Ответы (1)


Вам нужно использовать distinct .. посмотрите здесь для ясного объяснения

Итак, эта строка:

<%= f.select :address, options_for_select(@user.addresses.all.pluck(:name,:id), @case.address&.id) %><br><br><br>

Должно быть так:

<%= f.select :address, options_for_select(@user.addresses.distinct.pluck(:name,:id), @case.address&.id) %><br><br><br>

Также обратите внимание, что @user.addresses.all совпадает с @user.addresses

person Khaled Hassan    schedule 09.12.2020
comment
Привет, Халед, я говорю об активном коде администратора. то что вы написали уже работает - person nourza; 09.12.2020
comment
Этот адрес f.inputs для: [:address, f.object.address || Address.new] сделать |meta_form| meta_form.input :name, :as =› :select, :collection =› Address.order(name: :desc).collect {|address| [адрес.имя, адрес.идентификатор] } - person nourza; 09.12.2020
comment
Я думаю, это будет близко к тому, что я написал. Address.order(name: :desc).distinct.collect - person Khaled Hassan; 09.12.2020
comment
Нет, это не работает. дублирование очень странное - person nourza; 09.12.2020