请我帮忙!似乎我的协会不能正常工作,但我找不到什么是错的。 我有学生和监护人之间的关系,学生有很多监护人和监护人属于学生
我无法获得以学生形式插入的录取号码,以监护人的形式,似乎没有关系,但我无法解决它!
我不知道为什么用户会投票我的问题! :D我只是不能做这个工作所以我要求帮助:O
students_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
guardians_controller.rb
class GuardiansController < ApplicationController
def index
end
def show
end
def new
@guardian = Guardian.new
end
def edit
end
end
student.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
guardian.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>
答案 0 :(得分:1)
在guardians_controller的新动作中,您创建了监护人的空白对象。所以你没有得到学生入学号码的价值。在这种情况下,您需要添加嵌套资源。
在您的路线文件中添加以下代码
resources :students do
resources :guardians
end
现在更改students_controller
的创建操作的代码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| %>
答案 1 :(得分:0)
第一件事就是,正如你的监护人模型所暗示的那样,我猜你没有任何字段可以存储学生的参考资料。所以,请首先在监护人模型中添加一个字段student_id。你也没有在监护人模型中有admission_no字段。所以,如果你想存储admission_no然后在DB中添加一个字段,如果你只想显示值,在监护人模型中添加
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%>
希望它会对你有所帮助。