【问题标题】:Not able to get pick with select_tag如何在创建操作中调用 Select_tag
【发布时间】:2020-08-03 19:29:29
【问题描述】:

实际上我从类别中获取我的类别模型值以获取输入..... category_id 在产品模型中充当外键 我正在接受这样的输入

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

并在 Product_controller 中传递类别 ID 创建这样的操作

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

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4 ruby-on-rails-6


    【解决方案1】:

    控制器代码如下:

    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_forform_with,因此请使用您的表单构建器对象。

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

    我已经使用了 collection_select,你甚至可以使用其他选择助手。

    另一种解决方法是使用名称属性作为product[category_id]

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

    【讨论】:

    • Thankyou Anand 当我将表单构建器对象与您给定的选择助手一起使用时,它解决了我的问题
    【解决方案2】:

    解决问题的两种方法:

    第一:有实际配置

    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
    

    第二:将选择标签重命名为'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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-19
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 2015-12-03
      • 1970-01-01
      • 2014-01-30
      相关资源
      最近更新 更多