ruby on rails에서 모델의 관련 상세 정보
3335 단어 모델 관련rubyonrails
모델과 관련된 것을 배우기 전에 먼저 몇 가지를 명심해야 한다.
1. 연관관계는 양쪽 끝을 모두 잘 써야 한다. 그렇지 않으면 초보자가 알아볼 수 없는 오류가 생길 수 있다.그리고 코드를 이해하는 데 매우 좋다.
2.모델의 이름은 단수이고 controller는 복수이다.
3.blong_to 뒤에는 반드시 단수이고 소문자여야 합니다.has_many 뒤에는 복수가 있어야 합니다.
한 쌍 남짓
예:
왕 씨 어머니는 두 명의 아이가 있는데, 샤오밍과 샤오량이다.왕엄마, 아이가 많다고 할 수 있어요.샤오밍, 엄마가 하나 있다.왕 군, 엄마가 있어요.우리는 일반적으로 시계를 설계할 때 이렇게 설계한다.
mothers 테이블에서 id와name
sons 테이블에 id와name이 있습니다.
논리적 관계를 늘리기 위해 메인 키 관계는 여러 쪽에서 한 열을 늘리기 때문에sons표에는 세 열, id와name,mother_id (mothers 테이블에 대응하는 id)
일반 SQL:
select test_associate.mothers.name from test_associate.mothers inner join test_associate.sons on sons.mother_id = mothers.id where sons.name = ' '
루비 코드:
class Mother
has_many :sons
end
class Son
belongs_to :mother
end
해석: 엄마 하나에 자식 하나, 아들 하나에 엄마 하나.우리는 rails console에서 테스트할 수 있다.
xiao_wang = Son.first
mom = xiaowang.mother
이거.mother 방법은 class Son의 belongs_to:mother라는 말이 만들어졌어요.
즉, 한 번 변환된 sql 문장에 해당한다.
select * from mothers
join sons
on sons.mother_id = mothers.id
where sons.id = 1
자세한 설명:A:belongs_to :mother
B:belongs_to :mother, :class => 'Mother', :foreign_key => 'mother_id'
A=B
이것이 바로 Rails의 가장 전형적인 관례에 따라 프로그래밍을 하고 어떤 테이블에 대응하는 class를 설명하며 class 간에 관련 관계를 잘 설명하는 것이다.
1.belongs_to:mother,rails는:mothers표, 1의 한쪽이라고 판단할 수 있다.현재class는'class Son'이다. 그러면 rails는 두 표의 대응 관계를 알 수 있다.
2.:class=>'Mother'는 하나의 끝, 대응하는 모델class가 어머니임을 나타낸다.rails의 관례에 따르면 Mother모델은 데이터베이스에 있는mothers표에 대응한다.
3.:foreign_key => 'mother_id', rails에서 알 수 있듯이, 외키는'mother_id'. 한 쌍의 다중 관계에서 외부 키는 여러 개의 끝에 저장된다(즉sons, 그러니까sons표에 열이 있어야 한다:mother_id)
그래서 이 복잡한 SQL 조건이 모두 갖추어져서 생성할 수 있다.
위의 루비 코드는 설정된 후에 이렇게 호출할 수 있습니다.
son = Son.first
son.mother # .mother , class Son belongs_to 。
mother = Mother.first
mother.sons # .sons , class Mother hash_many 。
2:1 대 1, 비교적 간단하고 자주 사용하지 않습니다. 여기는 소개하지 않습니다.여보다대다
예:
한 학생, 여러 선생님이 있습니다.
한 선생님은 여러 아이를 가르칠 수 있다.
우리는 종종 이렇게 한다.
students에는 id와name 두 필드가 있습니다.
teachers에는 id와name 두 필드가 있습니다.
어떤 시계에 놓아도 적합하지 않다. 이것은 우리가 필요로 하는 중간 시계, 즉 교량 시계이다.
lessons에는 id와name,student_가 있습니다id와 teacher_id
원래 SQL:
select teachers.*, students.*, lessons.*
from lessons from teachers ,
join teachers
on lessons.teacher_id = teachers.id
join students
on lessons.student_id = students.id
where students.name = ' '
루비 코드:
class Student
has_many :lessons
has_many :teachers, :through => :lessons
end
힌트:has_many:teachers,:through=>:lessons는has_many :teachers, :class => 'Teacher', :foreign_key => 'teacher_id', :throught => :lessons
class Teachers
has_many :lessons
has_many :students, :through => :lessons
end
왕 군의 선생님은 위의 원시 SQL 문장과 어떤 것들이 있는지 보십시오.
Student.find_by_name(' ').teachers
이상은 본고가 여러분에게 공유한 모든 내용입니다. 제시된 예시도 매우 간단하고 이해하기 쉬우니 여러분이 좋아하시기 바랍니다.