Ruby on rails 访问连接表
如果我有两个具有多对多关系的表:Ruby on rails 访问连接表,ruby-on-rails,ruby,sequel,Ruby On Rails,Ruby,Sequel,如果我有两个具有多对多关系的表: DB.create_table? :students do primary_key :id String :name end DB.create_table? :books do primary_key :id String :title end DB.create_table? :students_books do Integer :num_days_borrowed fo
DB.create_table? :students do
primary_key :id
String :name
end
DB.create_table? :books do
primary_key :id
String :title
end
DB.create_table? :students_books do
Integer :num_days_borrowed
foreign_key :student_id,
:students,
:key => :id,
:allow_null => false
foreign_key :book_id,
:books,
:key => :id,
:allow_null => false
end
我有以下续集课程:
class Student < Sequel::Model(:students)
many_to_many :books,
:left_key => :student_id,
:right_key => :book_id,
:join_table => :students_books
def borrowed(bk)
add_book(bk)
end
end
class Book < Sequel::Model(:books)
many_to_many :books,
:left_key => :book_id,
:right_key => :student_id,
:join_table => :students_books
end
我的问题是如何使用Sequel模型分配值和检索
num\u days\u
属性?您需要向Sequel提供有关您的模型的更多信息
在您的学生
和书籍
模型中,添加这些模型和连接表之间的一对多
关系(参考连接表中的外键)
然后创建一个StudentsBook
模型,您将在其中设置连接表和其他表之间的多对一关系
但首先,在连接表中设置主键:
然后将模型设置为如下所示:
class-Student:学生号,
:right\u key=>:book\u id,
:join\u table=>:学生\u书籍
一对多:学生书籍,:key=>:学生id
def借用(bk)
添加书籍(bk)
结束
结束
类书:book_id,
:right\u key=>:学生号,
:join\u table=>:学生\u书籍
一对多:学生书籍,:key=>:学生id
结束
班级学生用书<续集::模型(:学生用书)
多对一:书
多对一:学生
结束
现在,您可以访问连接表中的任何列:
s1=Student.create(:name=>'Hari')
b1=Book.create(:title=>Foundation)
s1.添加_书(b1)
s1.学生\书本。第一次[:借来的天数]=10
s1.students\u books.first.save
把学生的书放在第一位
#=>10,:学生id=>1,:书本id=>1}>
还要注意连接表和模型名称的多元化。首先,在连接表方面可能会有点棘手。使用一对多的连接模型是一种方法(正如前面提到的三个),但是您也可以通过添加一个:select=>[:books.*,:students\u books\u num\u days\u looked]选项来使用现有的多对多的书籍
关联。然后在返回的图书实例上,使用book[:num\u days\u borroed]
获取值
s1 = Student.create(:name => 'Hari')
b1 = Book.create(:title => 'Foundation')
s1.borrowed(b1)
DB.create_table :students_books do
# add columns, etc
primary_key [:student_id, :book_id]
end
class Student < Sequel::Model(:students)
many_to_many :books,
:left_key => :student_id,
:right_key => :book_id,
:join_table => :students_books
one_to_many :students_books, :key=>:student_id
def borrowed(bk)
add_book(bk)
end
end
class Book < Sequel::Model(:books)
many_to_many :books,
:left_key => :book_id,
:right_key => :student_id,
:join_table => :students_books
one_to_many :students_books, :key=>:student_id
end
class StudentsBook < Sequel::Model(:students_books)
many_to_one :book
many_to_one :student
end
s1 = Student.create(:name => 'Hari')
b1 = Book.create(:title => 'Foundation')
s1.add_book(b1)
s1.students_books.first[:num_days_borrowed] = 10
s1.students_books.first.save
puts StudentsBook.first.inspect
#=> #<StudentsBook @values={:num_days_borrowed=>10, :student_id=>1, :book_id=>1}>