프로젝트, 작업 및 하위 작업과 관련된 3 가지 모델이 있습니다.클래식 조인 테이블이없는 많은 관계가 있음
프로젝트에는 많은 작업이 있으며 작업에는 많은 하위 작업이 있습니다. 따라서 작업은 프로젝트에 속하며 하위 작업은 작업에 속합니다.
지금 프로젝트와 하위 작업 간에는 직접 연결이 없습니다. 하나 만들고 싶습니다. @ some_project.subtasks & @ some_subtask.project와 같은 것들에 접근 할 수 있습니다. 하위 마이 그 레이션에 project_id 필드를 추가하지 말고 프로젝트 및 하위 작업 (작업에 이미 project_id 열과 하위 작업과 has_many 관계가 있으므로) 간의 일종의 '연결'로 작업 모델을 사용합니다.
나는 프로젝트 has_many를 작성하여 시작 : 하위 : 통한 => : 작업 및 하위의 belongs_to : 프로젝트.프로젝트 모델에 하위 작업 메서드가 있는데, @ some_subtask.project를 쓸 때 항상 항상 0이됩니다. 또한 @ some_project.subtasks에서 범위 지정을 사용하면 항상 '모호한 열 이름'오류가 발생합니다.
내가 내 관계를 잘못했기 때문에 이라고 생각합니다. 어떻게해야할까요? 또한 하위 타스크 마이그레이션 파일에 project_id 필드를 추가하는 것이 더 나은 솔루션 (또는 완전히 다른 무언가)이라면 꼭 알려주십시오.
편집 : 여기에 열 이름 오류를 반환 범위이다 나는 시도
10 # SCOPING
11 def self.included(base)
12
13 today = Date.today
14 start_of_day = DateTime.new(today.year, today.month, today.day, 0, 0, 1)
15 end_of_day = DateTime.new(today.year, today.month, today.day+1, 0, 0, 0)
16
17 base.class_eval do
18 scope :not_targeted, where(:target => nil)
19 scope :targeted, where("target IS NOT ?", nil)
20 scope :targeted_today, where("target > ? AND target < ?", start_of_day, end_of_day)
21 scope :targeted_after_today, where("target > ?", end_of_day)
22 scope :overdue, where("target < ?", start_of_day)
23 end
24
25 end
그 반환 오류 (내가 그들을 lib 디렉토리/폴더에있다가, 그것은 작업 및 하위 모델에 포함 된 모듈이다) 프로젝트 컨트롤러에서 이러한 변수를 정의 할 수 있습니다 (줄 47 및 51은 오류에 대한 책임입니다). 기본적으로 적절한 기록을 전달하고 반환해야합니다.
1 class Task < ActiveRecord::Base
2
3 include SharedModelCode
4 # has scoping and validate method
5
6 # RELATIONSHIPS
7 belongs_to :project
8
9 has_many :vesicles, :dependent => :destroy
10 has_many :users, :through => :vesicles, :dependent => :nullify
11
12 has_many :subtasks
13
14 has_many :discussions, :as => :discussionable, :dependent => :destroy
15
16 # VALIDATIONS
17 validates :project, :presence => true
18 validates :name, :presence => true,
19 :length => { :maximum => 50 }
20 validates :description, :presence => true,
21 :length => { :maximum => 200, :minimum => 15 }
22 validate :target_date_cannot_be_in_the_past
23
24 # ATTRIBUTE ASSIGNMENT
25 attr_accessible :name, :description, :target, :completed
26
27 # CUSTOM METHODS
28 def belonging_project
29 Project.find_by_id(self.project_id)
30 end
31
32 end
: 여기 1 class Project < ActiveRecord::Base
2
3 # RELATIONSHIPS
4 has_many :synapses, :dependent => :destroy
5 has_many :users, :through => :synapses, :dependent => :nullify
6
7 has_many :tasks, :dependent => :destroy
8 has_many :subtasks, :through => :tasks, :dependent => :destroy
9 has_many :discussions, :as => :discussionable, :dependent => :destroy
10
11 #use this when you don't have callbacks
12 #has_many :tasks, :dependent => :delete_all
13
14 # VALIDATIONS
15 validates :name, :presence => true,
16 :length => { :maximum => 50 }
17
18 validates :description, :presence => true,
19 :length => { :maximum => 200, :minimum => 15 }
20
21 # ATTRIBUTE ASSIGNMENT
22 attr_accessible :name, :description
23
24 # CUSTOM METHODS
25 def belonging_project
26 self
27 end
28
29 end
이 작업 모델 :이 오류 라인 47 명을 반환 예를 들어
35 @project_tasks = @project.tasks
36 @project_subtasks = @project.subtasks
45 @today_tasks = @project_tasks.targeted_today
46 @today_subtasks = @project_subtasks.targeted_today
47 @today = @today_tasks + @today_subtasks
48
49 @after_today_tasks = @project_tasks.targeted_after_today
50 @after_today_subtasks = @project_subtasks.targeted_after_today
51 @after_today = @after_today_tasks + @after_today_subtasks
... 여기
SQLite3::SQLException: ambiguous column name: target: SELECT "subtasks".* FROM "subtasks" INNER JOIN "tasks" ON "subtasks"."task_id" = "tasks"."id" WHERE "tasks"."project_id" = 1 AND (target > '2012-06-24 00:00:01' AND target < '2012-06-25 00:00:00')
프로젝트 모델입니다
여기에 Subtask mod가 있습니다. 엘 :이 같은
1 class Subtask < ActiveRecord::Base
2
3 include SharedModelCode
4 # has scoping and validate method
5
6 # RELATIONSHIPS
7 belongs_to :task
8 belongs_to :project
9
10 has_many :subvesicles, :dependent => :destroy
11 has_many :users, :through => :subvesicles, :dependent => :nullify
12
13 has_many :discussions, :as => :discussionable, :dependent => :destroy
14
15 # VALIDATIONS
16 validates :name, :presence => true
17 validates :task, :presence => true,
18 :length => { :maximum => 200 }
19 validate :target_date_cannot_be_in_the_past
20
21 # ATTRIBUTE ASSIGNMENT
22 attr_accessible :name, :target, :completed
23
24 # CUSTOM METHODS
25 def belonging_project
26 task = Task.find_by_id(self.task_id)
27 Project.find_by_id(task.project_id)
28 end
29
30 end
"모호한 열"- 오류 : 스키마 모양은 어떻습니까? 제가 할 수있는 한'@ project.subtasks'는 잘 작동 할 것입니다. '@ subtask.project'와 마찬가지로 Subtask에'project' 인스턴스 메소드를 추가 할 수 있습니다 :'def project() task.project; 끝 ' – Flambino
좋아, 내가 반환 범위와 오류 메시지를 ... – oFca
참고 자료 레일은'all_xxx'와 같은 메소드로 Time을 확장합니다. 여기서'xxx'는'day','week','month', 'quarter','year'. 결과는 시간 범위입니다. 범위를 다루는 ActiveRecord의 능력과 결합하면'.where (target : Time.now.all_day)'와 같은 일을 할 수 있습니다. – jdoe