Как вызвать Select_tag в действии Create в контроллере - PullRequest
0 голосов
/ 03 августа 2020

На самом деле я получаю значения моей модели категории из категории для ввода ..... category_id действует как внешний ключ в модели продукта. Я принимаю такие данные

<%= select_tag 'category', options_for_select(Category.pluck(:name, :id)), class: 'form-control', id: 'sel1' %>

И передаю идентификатор категории в Product_controller Создайте действие, подобное этому

def create
@product = Product.new(product_params)
@product.user = current_user

  private

def product_params
  params.require(:product).permit(:productname, :productprice, :productstatus,:image ,:category )
end

Но когда я создаю свой продукт, возникает ошибка, эта категория должна присутствовать. Я думаю, что params [: category] не передают category_id

Ответы [ 2 ]

0 голосов
/ 03 августа 2020

Код контроллера может быть следующим:

def create
  @product = Product.new(product_params)
  @product.user = current_user
  @product.save
end

private

def product_params
  params.require(:product).permit(:productname, :productprice, :productstatus, :image, :category_id)
end

Код просмотра будет следующим: В идеале ваш category_id должен быть params[:product]. Ваши параметры должны выглядеть как {product: {category_id: 1, other_attr: 'abc'}}

. Вы должны использовать form_for или form_with, поэтому используйте свой объект formbuilder.

<%= form_with(model: @product) do |f| %>
  <%= f.collection_select :category_id, Category.all, :id, :name, class: 'form-control', id: 'sel1' %>
<% end %>

Я использовал collection_select, вы даже можете использовать другие помощники выбора.

Другой обходной путь может заключаться в использовании атрибута name как product[category_id]

<%= select_tag 'category', options_for_select(Category.pluck(:name, :id)), name: 'product[category_id]', class: 'form-control', id: 'sel1' %>
0 голосов
/ 03 августа 2020

Два подхода к решению проблемы:

Первый: с фактической конфигурацией

def create
  @product = Product.new(product_params)
  @product.user = current_user
  @product.category_id = params[:category]
  @product.save
end

private

def product_params
  params.require(:product).permit(:productname, :productprice, :productstatus, :image)
end

Второй: переименовать тег select в 'product [category_id]'

def create
  @product = Product.new(product_params)
  @product.user = current_user
  @product.save
end

private

def product_params
  params.require(:product).permit(:productname, :productprice, :productstatus, :image, :category_id)
end
...