Помогите с рельсами вложенных форм - PullRequest
1 голос
/ 19 марта 2011

У меня есть эти три модели.

Студент.Оценка.Оценка (student_id, valuatioin_id, значение)

Я хочу создать форму, чтобы пользователь мог установить оценку для каждого учащегося оценки ...

Я хочу сохранить это какочистить как можно (и успокоиться) ...

Я открыт для любых предложений о том, как это сделать.

Пожалуйста, помогите.

Ответы [ 3 ]

0 голосов
/ 19 марта 2011

Я полагаю, у вас есть следующие ассоциации:

Оценка:

class Evaluation < ActiveRecord:Base
  has_many :grades
  accepts_nested_attributes_for :grades
end

Слушатель:

class Student < ActiveRecord::Base
  has_many :grades
end

Оценка:

class Grade < ActiveRecord::Base
   belongs_to :student
   blongs_to  :evaluation
end

Что касается вашего комментария, я думаю, вы хотите использовать камень nested_form_for , сделанный Райаном Бейтсом. Это помогает вам добавлять / удалять динамически вложенные атрибуты в вашей форме, очень эффективно. Вы можете использовать это так:

    <% nested_form_for @evaluation do |f| %>
      <% f.fields_for :grades do |gf| %>
        <%= gf.label 'Username of the student' %>
        <%= gf.collection_select(:student, :student_id, Student.All, :id, :username) %>    <br/>
        <%= gf.label :value %>
        <%= gf.text_field :value %> <br/>
        <%= gf.link_to_remove 'delete' %> <br/>
      <% end %>
      <%= f.link_to_add 'Add grade', :grades %> <br/>
      <%= f.submit %>
    <% end %>

Скажите, работает ли он / соответствует вашим потребностям. Я много раз использовал этот драгоценный камень в предыдущие дни.

0 голосов
/ 23 марта 2011

То, что я в итоге сделал, было ..

В модели оценки

scope :for_student,lambda{|student, evaluation| where("student_id"=>student.id).where("evaluation_id"=>evaluation.id)}

В контроле оценки

def assign_grades])
    @evaluation = Evaluation.find(params[:id])
    @students = Student.all  
    @students.each do |s|
      grade = Grade.for_student(s,@evaluation)
      if !grade.exists?  
       @evaluation.grades.build(:value=> 0,:student_id=>s.id)       
      end   
    end
  end

  def save_grades
    @evaluation = Evaluation.find(params[:id])
    @evaluation.update_attributes(params[:evaluation])

    redirect_to [@evaluation.batch_subject, @evaluation]

  end

В представлении

<table class="medium">      
<thead>
   <tr>
   <th>name</th>
   <th>Grade</th>
   </tr>
</thead>
<tbody>
   <%=f.fields_for :grades do |g|%>
    <tr>
      <td><%=g.label :value,g.object.student.full_name%> <%= g.hidden_field :student_id%></td>
<td><%=g.text_field :value%></td>
</tr>
<%end%>
</tbody>
</table>
0 голосов
/ 19 марта 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...