-1

请我需要帮助!似乎我的关联无法正常工作,但我找不到问题所在。我有学生和监护人的关系,学生有很多监护人,监护人属于学生

学生表和监护人表中插入的录取号码无法获取,似乎没有关系,但我无法解决!

我不知道为什么用户对我的问题投反对票!:D 我只是无法完成这项工作,所以我寻求帮助 :O

student_controller.rb

class StudentsController < ApplicationController
  def index
    @student = Student.all
  end

  def show
    @student = Student.find(params[:id])
  end

  def new
    @student = Student.new
  end

  def create
    @student = Student.new(params[:student])
    if @student.save
      flash[:success] = ' Student Record Saved Successfully. Please fill the Parent Details.'
      redirect_to new_guardian_url
    else
      flash.now[:error] = 'An error occurred please try again!'
      render 'new'
    end
  end

  def edit
  end
end

监护人控制器.rb

class GuardiansController < ApplicationController
  def index
  end

  def show
  end

  def new
    @guardian = Guardian.new
  end

  def edit
  end
end

学生.rb

class Student < ActiveRecord::Base
  attr_accessible :address_line1, :address_line2, :admission_date, :admission_no, :birth_place, :blood_group, :city,
                  :class_roll_no, :date_of_birth, :email, :first_name, :gender, :language, :last_name, :middle_name,
                  :phone1, :phone2, :post_code, :religion, :country_id, :nationality_id
  belongs_to :user
  belongs_to :country
  belongs_to :school
  belongs_to :batch
  belongs_to :nationality , class_name: 'Country'
  has_many :guardians
  has_many :student_previous_subject_marks
  has_one :student_previous_data
end

监护人.rb

class Guardian < ActiveRecord::Base
  attr_accessible :city, :dob, :education, :email, :first_name, :income, :last_name, :mobile_phone, :occupation,
                  :office_address_line1, :office_address_line2, :office_phone1, :office_phone2, :relation
  belongs_to :user
  belongs_to :country
  belongs_to :school
  belongs_to :student
end

监护人/new.html.erb

<h1>Admission</h1>
<h4>Step 2 - Parent details</h4>

<div class="row-fluid">
  <div class="span4 offset1 hero-unit">
    <%= form_for @guardian do |f| %>
        <% if @guardian.errors.any? %>
            <div id="error_explanation">
              <div class="alert alert-error">
                The form contains <%= pluralize(@guardian.errors.count, 'error') %>
              </div>
              <ul>
                <% @guardian.errors.full_messages.each do |msg| %>
                    <li>* <%= msg %></li>
                <% end %>
              </ul>
            </div>
        <% end %>

        <fieldset>
        <div class="field">
          <%= f.label 'Student Admission number' %>
          <%= f.text_field @guardian.student.admission_no %>
        </div>
4

2 回答 2

1

在 Guardians_controller 的新动作中,您已经创建了监护人的空白对象。所以你没有得到学生录取号码的价值。在这种情况下,您需要添加嵌套资源。

在您的路线文件中添加以下代码

resources :students do
 resources :guardians
end

现在更改students_controller的create action的代码

def create
    @student = Student.new(params[:student])
    if @student.save
      flash[:success] = ' Student Record Saved Successfully. Please fill the Parent Details.'
      redirect_to new_student_guardian_path(@student)
    else
      flash.now[:error] = 'An error occurred please try again!'
      render 'new'
    end
end

您还需要将以下代码添加到 Guardians_controller 的新操作中。

def new
    @guardian = Guardian.new({:student_id => params[:student_id]})
end

现在您可以在您的 html 表单中获取相关学生的录取编号的值。

在guardians/new.html.erb中,需要修改

<%= form_for(@guardian, :url => student_guardians_path(params[:student_id]), :method => 'post') do |f| %>
于 2013-06-25T14:40:48.177 回答
0

第一件事是,正如您的监护人模型所暗示的那样,我猜您没有任何字段来存储学生的参考资料。因此,请先添加它,例如在监护人模型中添加字段 student_id。此外,监护人模型中也没有 admission_no 字段。所以,如果你想存储 admission_no 然后在数据库中添加一个字段,如果你只想显示值,在监护人模型中添加

attr_accessor :admission_no

现在,由于在 GuardiansController 的新操作中,您正在创建一个尚未与学生表中的任何记录关联的对象。因此,使用像 bachan 在他的回答中所说的嵌套资源,您可以实现目标。

创建嵌套资源:-

resources :students do
 resources :guardians
end

然后在 GuardiansController 的新动作中

def new
  @student = Student.find(params[:student_id])
  @guardian = Guardian.new
end

现在将您的 form_for 替换为

<%= form_for([@student, @guardian]) do |f| %>
  .............
  <%= f.text_field :admission_no, :value => @student.admission_no %>
  .............
<% end%>

如果您想将学生的 ID 也存储在监护人表中。如果没有,那么您可以使用

<%= form_for(@guardian, :url => student_guardians_path(@student), :method => :post) do |f| %>
  .............
  <%= f.text_field :admission_no, :value => @student.admission_no %>
  .............
<% end%>

希望它会帮助你。

于 2013-06-26T06:54:10.733 回答