2011-11-09 32 views
6

Có nhiều hướng dẫn cho bạn thấy cách tạo hướng dẫn mô hình cho mối quan hệ has_many: thông qua Rails, nhưng dường như không có nhiều bài viết liên quan đến quá trình thiết lập biểu mẫu để tạo và chỉnh sửa các mối quan hệ này. Tôi đang tìm kiếm một số trợ giúp (hoặc ví dụ hay) về cách tạo giao diện cho phép người dùng quản lý các loại mối quan hệ này trong ứng dụng Rails.Tạo bộ điều khiển và chế độ xem cho mối quan hệ has_many: thông qua mối quan hệ trong Rails 3

Đây là kịch bản:

Tôi có người sử dụng, mối quan hệ, và vận động viên. Người dùng có thể có mối quan hệ với Vận động viên trong nhiều vai trò khác nhau: Huấn luyện viên, Người cố vấn, Cha mẹ hoặc Người hâm mộ.

Dưới đây là mô hình của tôi:

class User < ActiveRecord::Base 
    has_many :relationships 
    has_many :athletes, :through => :relationships 
end 

class Athlete < ActiveRecord :: Base 
    has_many :relationships 
    has_many :users, :through => :relationships 
end 

class Relationship < ActiveRecord :: Base 
    belongs_to :users 
    belongs_to :athletes 
end 

Vì vậy, bước tiếp theo là xây dựng các quan điểm và điều khiển cho phép tôi để tạo ra một tài khoản-to-Athlete mối quan hệ (với một huấn luyện viên, phụ huynh, vv vai trò), chỉnh sửa mối quan hệ hoặc phá hủy mối quan hệ.

Cuối cùng, mục đích của tôi là có một kịch bản nơi Người dùng có thể tạo Vận động viên và chọn Mối quan hệ liên quan.

Thật không may, tôi không thể tìm thấy bất kỳ hướng dẫn cụ thể hoặc tài liệu tham khảo nào mang lại cho tôi nhiều hơn hướng dẫn mô hình hoặc ví dụ về mối quan hệ has_many.

Nếu có ai có liên kết hoặc ví dụ có thể giải quyết vấn đề này ở mức đơn giản, tôi sẽ có thể tùy chỉnh phần còn lại.

Trả lời

5

Mối quan hệ bạn có ở đây giữa mô hình Người dùng và Người vận động của bạn về cơ bản là mối quan hệ has_and_belongs_to_many (HABTM). Bằng cách đi qua lại với bạn có vẻ như bạn đang bối rối về cách tốt nhất để tạo ra những mối quan hệ này là gì.

Một nơi tốt để bắt đầu đọc sẽ có trong tài liệu dành cho Hội của ActiveRecord, cụ thể là the documentation for HABTM relationships.

Bạn đang thiết lập mô hình là tốt. Bây giờ bạn đã thiết lập mối quan hệ HABTM, dưới đây là những gì bạn có thể làm. Giả sử cả mô hình vận động viên và người dùng của bạn đều rất đơn giản và không có gì ngoài thuộc tính name, là một chuỗi. Bây giờ bạn có thể làm mã như thế này (đây là giao diện điều khiển đầu ra từ các đường ray console):

User.create(:name => "Jeff") 
usr = User.first 
=> #<User id: 1, name: "Jeff"> 
usr.athletes 
=> [] 
atl = usr.athletes.create(:name => "Mike") 
=> #<Athlete id: 1, name: "Mike"> 

Dòng trên sẽ tạo một người dùng với tên Mike, và tự động tạo ra một mục mối quan hệ với phù hợp các thuộc tính liên kết hai . Vì vậy, bây giờ nếu bạn gọi đây là:

usr.athletes 
=> [#<Athlete id: 1, name: "Mike">] 

Bây giờ nếu bạn muốn cho phép người dùng ra lệnh gì mối quan hệ giữa bản thân và một vận động viên khi tạo vận động viên, bạn có thể thiết lập lớp Mối quan hệ của bạn để có một lĩnh vực relation loại string, và khi tạo các mối quan hệ (như tôi chỉ hiển thị ở trên), sau đó bạn có thể làm một cái gì đó như thế này:

rel = usr.relationships.where(:user_id => usr.id, :athlete_id => atl.id).first 
=> #<Relationship id: 1, user_id: 1, athlete_id: 2, :relation => nil> 
rel.relation = "Friend" 
rel.save 
=> #<Relationship id: 1, user_id: 1, athlete_id: 2, :relation => "Friend"> 

Hy vọng rằng đây là có ích hơn câu trả lời ban đầu của tôi. Hãy cho tôi biết nếu bạn có bất kỳ câu hỏi. Và chắc chắn hãy chắc chắn xem tài liệu của Hiệp hội ActiveRecord mà tôi đã đề cập ở trên.

+0

Vâng, tôi đã xem ví dụ đó và nó không phải là một ví dụ tuyệt vời từ một giải thích standpont; mặc dù nó có thể là người duy nhất sử dụng. – wrburgess

+0

Tôi đoán tôi không rõ ràng về cách bạn muốn trang web hoạt động. Có lẽ trong trang Hiển thị # vận động, chế độ xem của người dùng có thứ gì đó để họ có thể nhấn nút để kích hoạt biểu mẫu cho phép họ gửi biểu mẫu với trường văn bản nơi nó sẽ thêm mối quan hệ và chỉ ra mối quan hệ là gì vận động viên trong lĩnh vực văn bản? Xin lỗi đó là điều tốt nhất tôi có thể làm mà không có giải thích kỹ lưỡng hơn về chức năng mong muốn. – Batkins

+0

Tóm lại, tôi phải xây dựng một hình thức mà một người dùng có thể tạo ra một vận động viên và sau đó chỉ ra vai trò nào họ muốn cho mối quan hệ (huấn luyện viên, phụ huynh, vv). Các biểu mẫu đường ray có vẻ đơn giản cho một liên kết Nhiều-một, nhưng không có nhiều ví dụ về cách xây dựng các khung nhìn và các bộ điều khiển cho nhiều-nhiều (mà tôi đã tìm thấy). Tôi có thể làm điều này quá khó, nhưng tôi vẫn đang cố gắng tìm ra "đường ray" để làm công cụ này. Tôi có thể làm điều này trong PHP trong giấc ngủ của tôi. – wrburgess

0

Thử railscasts hoặc ascii phôi. Đó là nơi tôi thường bắt đầu. Không chắc chắn nếu đây là những gì bạn đang sau nhưng có một hướng dẫn trên các trang web cho các hình thức lồng nhau. Tôi nghĩ nó dưới dạng phức tạp. Sẽ có giá trị e đọc/xem anyway.

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