5

Tôi không thể tìm ra cách tôi có thể thiết lập biểu mẫu sẽ tạo Study mới trong khi cũng tạo StudySubject liên quan và Facility. user_id, facility_idstudy_subject_id phải có sẵn để tạo đối tượng Study như bạn có thể thấy trong mô hình quan hệ cơ sở dữ liệu.Cách tạo đối tượng lồng nhau trong Rails3 bằng cách sử dụng accept_nested_attributes_for?

Database model

Đây là cuộc di cư cho studies. Các bảng khác không chứa khóa ngoài.

def self.up 
create_table :studies do |t| 
    t.references :user 
    t.references :facility 
    t.references :subject 
    t.date "from" 
    t.date "till" 
    t.timestamps 
end 
add_index :studies, ["user_id", "facility_id", "subject_id"], :unique => true 
end 

Mô hình xác định các liên kết sau.

# user.rb 
has_many :studies 

# subject.rb 
has_many :studies 

# facility.rb 
has_many :studies 

# study 
belongs_to :user 
belongs_to :subject 
belongs_to :facility 

Câu hỏi

1) Có phải has_manybelongs_to định nghĩa đúng không?
2) Làm cách nào để tạo study bằng cách sử dụng accepts_nested_attributes_for?
3) Một nghiên cứu chỉ nên thuộc về một người dùng. Tôi có cần thêm user_id vào mọi đối tượng khác để lưu trữ liên kết không?

Tôi hoàn toàn mới đối với Rails kể từ 2 tuần học tập rộng rãi. Xin lỗi cho một câu hỏi ngu ngốc có thể.

+0

phần mềm nào được sử dụng để vẽ biểu đồ? – gmile

+0

@gmile Tôi đã sử dụng http://www.cacoo.com – JJD

Trả lời

4

Vâng. Nó hoạt động. Một người bạn tốt đã giúp đỡ anh ấy. Đây là những gì chúng tôi thiết lập.
Hãy nhớ rằng tôi đã đổi tên StudySubject thành Subject trong thời gian chờ đợi.

Mô hìnhstudy.rb

belongs_to :student, :class_name => "User", :foreign_key => "user_id" 
belongs_to :subject 
belongs_to :university, :class_name => "Facility", :foreign_key => "facility_id" 

accepts_nested_attributes_for :subject, :university 

Bộ điều khiểnstudies_controller.rb

def new 
    @study = Study.new 
    @study.subject = Subject.new 
    @study.university = Facility.new 
end 

def create 
    @study = Study.new(params[:study]) 
    @study.student = current_user 

    if @study.save 
    flash[:notice] = "Successfully created study." 
    redirect_to(:action => 'index') 
    else 
    render('new') 
    end 
end 

tôi sử dụng devise để xác thực và cancan cho phép. Đó là lý do tại sao current_user có sẵn trong bộ điều khiển.

Quan điểm nghiên cứu mớinew.html.erb

<%= form_for @study, :url => { :action => "create" } do |f| %> 

    <table summary="Study form fields"> 

    <%= render :partial => "shared/study_form_fields", :locals => { :f => f } %> 

    <%= f.fields_for :subject do |builder| %> 
     <%= render :partial => "shared/subject_form_fields", :locals => { :f => builder } %> 
    <% end %> 

    <%= f.fields_for :university do |builder| %> 
     <%= render :partial => "shared/facility_form_fields", :locals => { :f => builder } %> 
    <% end %> 

    </table> 

    <p><%= f.submit "Submit" %></p> 

<% end %> 

Tôi hy vọng điều này sẽ giúp bạn tiết kiệm thời gian. Tôi đã dành rất nhiều thời gian để nhận ra mọi thứ phải được thiết lập như thế nào.

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