简体   繁体   中英

rails : association tabel (has_and_belongs_to_many) not save any record

i use rails 5 , simple form. in my app there is a Category model and there is a OnlineProduct model. i dont know why when i want to add some categories to my OnlineProduct association table remain empty and don't change.

Category model:

class Category < ApplicationRecord

  has_ancestry

  has_and_belongs_to_many :internet_products

end

InternetProduct model:

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

InternetProduct 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

and in the view only the part of who relate to categories :

   <%= f.association :categories %>

all the categories list in view (form) but when i select some of them not save in database. in rails console i do this

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

this save to database without any problem, what should i do ? tanks for reading this

I found solution to solve this. when we use has_and_belong_to_many or any other relation , if you want to use collection select in simple_form , in the model also should be add this command for nesting form

  accepts_nested_attributes_for :categories  

also in the controller in related method for example in the new we should

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM