在 Rails 中存储连接模型数据
Store Join Model Data in Rails
我是 Rails 上 Ruby 的新手,我正在开发后端 API。
目前,我有 2 个 Active Record 模型,名为 Book 和 Genre。
活动记录模型
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 数组,例如数字或字符串。
我是 Rails 上 Ruby 的新手,我正在开发后端 API。
目前,我有 2 个 Active Record 模型,名为 Book 和 Genre。
活动记录模型
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 数组,例如数字或字符串。