Rails:协会Tabel(HAS_AND_BELONGS_TO_MANY)不能保存任何记录



i使用导轨5,简单表单。在我的应用中,有一个类别模型,并且有一个在线生产模型。我不知道为什么当我想在我的在线生产关联表中添加一些类别时,请保持空虚而不会更改。

类别模型:

class Category < ApplicationRecord
  has_ancestry
  has_and_belongs_to_many :internet_products
end

Internet Product模型:

class InternetProduct < ApplicationRecord
  belongs_to :user
  belongs_to :business
  has_and_belongs_to_many :categories
end

Internet Product Controller:

  def new
     @internet_product = InternetProduct.new
  end
  def create
     @internet_product = InternetProduct.new(internet_product_params)
     respond_to do |format|
        if @internet_product.save
           format.html { redirect_to @internet_product, notice: 'Internet product was successfully created.' }
           format.json { render :show, status: :created, location: @internet_product }
        else
            format.html { render :new }
            format.json { render json: @internet_product.errors, status: :unprocessable_entity }
        end
     end
  end
private:
def internet_product_params
  params.require(:internet_product).permit(:name, :description, :mainpic, :terms_of_use,
                                       :real_price, :price_discount, :percent_discount,
                                       :start_date, :expire_date, :couponـlimitation, :slung,
                                       :title, :meta_data, :meta_keyword, :enability, :status,
                                       :like, :free_delivery, :garanty, :waranty, :money_back,
                                       :user_id, :business_id,
                                       categoriesـattributes: [:id, :title])
end

在视图中,只有与类别相关的部分:

   <%= f.association :categories %>

查看(表单)中的所有类别列表,但是当我选择其中一些未保存在数据库中时。在铁轨控制台中,我这样做

 p = InternetProduct.find(5)
 p.categories = Category.find(1,2,3)

这个保存到数据库没有任何问题,我该怎么办?用于阅读此

的坦克

我找到了解决此问题的解决方案。当我们使用HAS_AND_BELONG_TO_MANY或任何其他关系时,如果要在Simple_form中使用Collection Select,则在模型中还应将此命令添加到嵌套表单

  accepts_nested_attributes_for :categories  

在相关方法中的控制器中也在新的中,我们应该

def new
  @internet_product = InternetProduct.new
  @internet_product.categories.build
end

最新更新