在 Rails 中存储连接模型数据

Store Join Model Data in Rails

我是 Rails 上 Ruby 的新手,我正在开发后端 API。

目前,我有 2 个 Active Record 模型,名为 BookGenre

活动记录模型

class Book < ActiveRecord::Base
    has_and_belongs_to_many :genres
end

class Genre < ActiveRecord::Base
    hast_and_belongs_to_many :books
end

数据库架构模型

create_table :books do |t|
  t.string "title"
end

create_table :genres do |t|
  t.string "genre"
end

create_join_table :books, :genres do |t|
  t.index [:book_id, :genre_id]
  t.index [:genre_id, :book_id]
end

REST POST 请求

 # POST /book
    def create
        book= Book.new(books_params)

        if book.save
            render json: {status: 'SUCCESS', message:'Book Saved', data: book},status: :ok
        else
            render json: {status: 'ERROR', message: 'Booknot saved', data: book.errors}, status: :unprocessable_entity
        end 

    end

private
    def books_params
        params.require(:book).permit(:title)
    end

问题

我想发出一个 HTTP Post 请求来创建一本 流派 的新书。我已经测试了书籍插入(没有流派,只是传递了书名),效果很好。不过我还想添加一些流派类别。

the has_many and has_and_belongs_to_many class methods 都创建了一组 _ids setter 和 getter:

book = Book.new
book.genre_ids = [1, 2, 3]
book.genre_ids == [1, 2, 3] # true

这些设置器将自动创建和删除联接中的行 table。由于 ActiveModel::AttributeAssignment 将散列参数映射到 .new.update.create 到模型中的设置器,您需要做的就是将 genre_ids 参数列入白名单:

def books_params
  params.require(:book).permit(:title, genre_ids: [])
end

传递空数组允许 permitted scalar values 数组,例如数字或字符串。