У меня есть одна таблица для продуктов, и продукт может быть либо внутри, либо снаружи, либо в обоих случаях. Поэтому я создал еще одну таблицу, чтобы сохранить местоположение продуктов. Теперь, когда администратор добавляет продукт, я предоставил возможность выбрать местоположение (я), в котором может находиться продукт, но когда он публикуется, код говорит, что поле не может быть пустым из-за проверки. Я не уверен, что мне не хватает или подход неправильный.
Модель продукта:
class Product < ApplicationRecord
validates :name, presence: true
has_many :product_locations
accepts_nested_attributes_for :product_locations
end
Модель местоположения продукта:
class ProductLocation < ApplicationRecord
enum locations: [:exterior, :interior]
validates :location, presence: true
validates :product_id, presence: true
belongs_to :product
end
Файл ActiveAdmin для продукта:
ActiveAdmin.register Product do
permit_params :name, product_locations_attributes: {}
actions :all, except: [:show, :destroy]
filter :name
index do
column 'Product Name', :name
actions
end
form do |f|
f.semantic_errors *f.object.errors.keys
f.inputs "Products" do
f.input :name
end
f.has_many :product_locations do |location|
location.inputs "Locations" do
location.input :location, as: :select, multiple: true, collection: ProductLocation.locations.keys
end
end
f.actions
end
controller do
def scoped_collection
Product.where(user_id: nil)
end
end
end
Я получаю множественный выбор для местоположений, в которых есть «Интерьер» и «Внешний вид» для выбора, но он говорит, что поле не может быть пустым, когда я выбираю местоположение и отправляю форму.
Ошибка при сохранении клика, которую я получаю:
Укажите местоположение.
Параметры, которые публикуются:
Parameters: {"utf8"=>"✓", "product"=>{"name"=>"Test Product", "product_locations_attributes"=>{"0"=>{"location"=>["0", "1"]}}}, "commit"=>"Create Product"}
permit_params :name, product_locations_attributes: {}
наpermit_params :name, product_locations_attributes: [:location]
- person Pavan   schedule 05.06.2017location.input :location, as: :select, multiple: true, collection: ProductLocation.locations.keys
должна бытьlocation.input :location, as: :select, multiple: true, collection: ProductLocation.locations
, так как.keys
не будет присутствовать в массиве. - person Sravan   schedule 05.06.2017permit_params :name, product_locations_attributes: [location: []]
, так как у вас есть множественный выбор. - person Pavan   schedule 05.06.2017location: []
или:location
? - person Pavan   schedule 05.06.2017