2015-04-08 2 views
6

У меня есть модель продукта с полем jsonb под названием dynamic.Можно ли отобразить форму с полями для свойств jsonb

У меня есть на самом деле 2 записи продукта

продукта 1:

dynamic = {"name": "super product 1", "description": "lorem ipsum text" } 

продукта 2:

dynamic = {"title": "this is an ebook", "author": "john doe", "creation_date": "2015"} 

Для редактирования каждого продукта мне нужно, чтобы показать форму. для продукта 1 форма будет содержит 2 поля (название и описание), а также для продукта 2 форма будет содержит 3 поля (название, автор, CREATION_DATE)

Я искал, но это, кажется, что все статьи, которые я нашел, говорят о том, как использовать консоль для сохранения или редактирования json-поля, но никто не говорит о том, как использовать форму.

любая помощь пожалуйста? Благодаря

ответ

6

Если вы используете simple_form вы можете сделать что-то вроде этого:

f.simple_fields_for :dynamic do |dynamic_f| 
    @product.dynamic.each do |k,v| 
    dynamic_f.input k.to_sym 
    end 
end 

Не забудьте разрешить параметры в контроллер, как это:

params.require(:product).permit(dynamic: [:name, :description, :title, :author, :creation_date]]) 

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

params.require(:product)permit(**permitted paramters in here**).tap do |whitelisted| 
    whitelisted[:dynamic] = params[:product][:dynamic] if params[:product][:dynamic] 
end 

Или, чтобы все необходимое для использования модели продукта:

params.require(:product).permit! 

Это не рекомендуется, хотя, как было бы оставить другие данные вне поля JSon открытой для перезаписи.

+0

Должен ли я что-то сделать, чтобы эти ключи находились в сильных параметрах или в модели с использованием attr_accessor или что-то в этом роде? – medBo

+0

Я делаю это с сильными параметрами. Я обновил ответ, чтобы показать, как я обычно обрабатываю его. – IngoAlbers

+0

Благодарим за обновление, но ключи от «динамического» поля не исправлены, я каждый раз создаю разные ключи, они могут быть другими вещами не только (имя, описание, название, автотор, создание_данные) – medBo

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