5

tôi đã thực hiện thừa kế bảng duy nhất cho một lớp ngườibị hỏng Rails Tuyến đường sau khi thực hiện đơn Table Inheritance

class Person < ActiveRecord::Base 

end 


class Teacher < Person 

end 

class Student < Person 

end 

class Outsider < Person 

end 

Và người tạo ra dường như làm việc tạo giáo viên, sinh viên hoặc người theo những gì được chọn theo hình thức .select và thuộc tính type được thêm vào.

Tuy nhiên, tôi dường như đã phá vỡ các tuyến đường

<% = link_to 'Chỉnh sửa', edit_person_path (@deal)%> | <% = link_to 'Quay lại', person_path%>

Dường như chúng trỏ đến teacher_path, student_path và outsider_path thay vì person_path.

Những thay đổi nào cần được thực hiện trong các tuyến đường?

Trả lời

2

đầu tiên tạo ra bộ điều khiển cho mô hình của bạn ...

rails generate controller Persons 
rails generate controller Teachers 
rails generate controller Students 
rails generate controller Outsiders 

sau đó trong routes.rb (đường ray 3)

resources :persons 
resources :teachers 
resources :students 
resources :outsiders 

mang đến cho Quý khách nghỉ ngơi tuyến

ví dụ

persons GET /persons(.:format) {:action=>"index", :controller=>"persons"} 
new_person GET /person/new(.:format) {:action=>"new", :controller=>"persons"} 
edit_person GET /persons/:id/edit(.:format) {:action=>"edit", :controller=>"persons"} 
person GET /persons/:id(.:format) {:action=>"show", :controller=>"persons"} 
persons POST /spersons(.:format) {:action=>"create", :controller=>"persons"}  
person PUT /persons/:id(.:format) {:action=>"update", :controller=>"persons"}  
person DELETE /persons/:id(.:format) {:action=>"destroy", :controller=>"persons"} 

tương tự cho giáo viên, học sinh và người ngoài

tuyến séc cào hoặc cào tuyến | grep teacher

+2

tôi không muốn điều khiển khác nhau cho mỗi một – Arc

+0

vì vậy bạn sẽ mất REST của thêm trong routes.rb trận đấu 'giáo viên /' => "người # chỉ số",: như =>: giáo viên trận đấu 'giáo viên /: id (.: format) '=> "người # show",: as =>: giáo viên và cứ thế ... – codevoice

+1

công trình này, nhưng không phải là DRY chút nào - bạn sẽ kết thúc lặp lại tất cả mã bộ điều khiển, và mã xem nhiều lần cho mỗi tiểu nhóm – Tilo

1

Từ kinh nghiệm của tôi, tốt hơn nên sử dụng một bộ điều khiển duy nhất cho tất cả các mô hình STI. Nếu bạn đang giữ bộ điều khiển DRY, bạn không cần phải có logic điều khiển duy nhất cho mỗi lớp con. Giữ tất cả những điều đó trong các mô hình.

resources :people 

tuyến đường được đặt tên của bạn sẽ như thế nào:

people_path 
new_person 
edit_person 
person 
etc... 

Sau đó, bạn có thể sử dụng bộ điều khiển tương tự/views để quản lý các mô hình này. Nếu bạn quyết định sau này để thêm các mô hình Person STI mới, bạn sẽ không phải thực hiện bất kỳ cập nhật quan trọng nào đối với mã của bạn.

+2

Điều này dường như không hoạt động. Đối với <% = link_to 'Edit', edit_person_path (@deal)%> nó cố gắng tìm edit_teacher_path (@user) và thất bại – Arc

+0

đã đấu tranh với bản thân mình ngay bây giờ .. Tôi muốn đối xử với các mô hình phụ của mình một cách khác biệt đáng kể trong các khung nhìn và không muốn có một bó logic điều kiện trong bộ điều khiển hoặc khung nhìn .. suy nghĩ? –

Các vấn đề liên quan