Имеет и принадлежит многим добавить в виду - PullRequest
1 голос
/ 16 июня 2011

Если бы у меня были эти отношения, как бы я добавил к своему виду, чтобы при создании учащегося мне предоставлялось текстовое поле, где я мог бы добавить несколько курсов для нового учащегося?

class Student < ActiveRecord::Base
  has_and_belongs_to_many :courses
end

class Course < ActiveRecord::Base
  has_and_belongs_to_many :students
end


<%= form_for(@student) do |f| %>

    <%= f.label :name %><br />
    <%= f.text_field :name%><br />

    <%= f.label :description %><br />
    <%= f.text_field :description %><br />

    <%= f.submit %><br />
<% end %>

Ответы [ 3 ]

0 голосов
/ 17 июня 2011

Я рекомендую рефакторинг ваших моделей следующим образом:

class Student < ActiveRecord::Base
  has_many :enrollments
  has_many :courses, :through => :enrollments
end

class Course < ActiveRecord::Base
  has_many :enrollments
  has_many :students, :through => :enrollments
end

class Enrollment < ActiveRecord::Base
  belongs_to :student
  belongs_to :course
end

и использование RyanB's nested_form gem: https://github.com/ryanb/nested_form

0 голосов
/ 17 июня 2011

<% = form_for (@student) do | f |%>

<%= f.label :name %><br />
<%= f.text_field :name%><br />

<%= f.label :description %><br />
<%= f.text_field :description %><br />
<%= f.fields_for :courses do |cf| %>
   ....course attributes
<% end %>
<%= f.submit %><br />

<% end%>

В вашем действии контроллера: @ student.courses.build это создаст один курс

или n.times do @student.courses.build end

добавит n курсов к объекту студента

0 голосов
/ 17 июня 2011

Взгляните на удивительную вложенную модель формы серии от Railscasts.

...