How to use multiple models in view template form in rails

34 views
Skip to first unread message

Tushar Patil

unread,
Jul 29, 2013, 1:34:12 AM7/29/13
to rubyonrails-talk

I am new to rails, And stuck in this problem from last two days I have a student and student_parent model they have a one-to-many relationship i want to build database attribute through one object from form to datase.

controller's method

def new
@student = Student.new
1.times{ @student.student_parents.build }
.....
.....

end

Create Method:-

def create
 @student = Student.new(params[:student])
 respond_to do |format|
 if @student.save
  format.html { redirect_to Student, notice: 'Student was successfully created.' }
  format.json { render json: @student, status: :created, location: @student }
 else
  format.html { render action: "new" }
  format.json { render json: @student.errors, status: :unprocessable_entity }
 end
end

Model:- class Student < ActiveRecord::Base
 belongs_to :user has_many :student_parents
attr_accessible :birth_date, :blood_group, :first_name, :gender, :last_name, :middle_name, :school_name, :student_rollno, :email, :user_id, :student_parents_attributes
accepts_nested_attributes_for :student_parents end

form:-

<%= simple_form_for @student, :html => { :class => 'form-horizontal' } do |f| %>
 <div class="row-fluid">
  <div class="span3">
    <%= f.label :first_name, :class => 'control-label',:required => true %>
    <%= f.text_field :first_name %>
  </div>
  <div class="span3">
    <%= f.label :middle_name, :class => 'control-label'%>
    <%= f.text_field :middle_name %>
  </div>
  <div class="span3">
    <%= f.label :last_name, :class => 'control-label',:required => true %>
    <%= f.text_field :last_name %>
  </div>
</div> &nbsp;

<div class="control-group">
  <label  class = "control-label"> Email </label>
  <div class="controls">
    <%= f.text_field :email, :class => 'text_field'  %>
  </div>
</div>

<div class="control-group">
  <label  class = "control-label"> Birth Date <abbr title="required">*</abbr></label>
  <div class="controls">
    <%= f.text_field :birth_date, :class => 'text_field' ,'data-behaviour' => 'datepicker' %>
  </div>
</div>

<% model_class = StudentParent %>
  <div class="page-header">
    <h4> Parent  Information</h4>
  </div>

<%= f.fields_for :student_parents  do |student_parent| %>
  <div class="row-fluid">

    <!--<div class="span9">-->

       <h5> Father Name </h5>

       <div class="span3">
          <%= student_parent.label :first_name, :class => 'control-label',:required => true %>
          <%= student_parent.text_field :first_name %>
       </div>

       <div class="span3">
          <%= student_parent.label :middle_name, :class => 'control-label'%>
          <%= student_parent.text_field :middle_name %>
       </div>

       <div class="span3">
          <%= student_parent.label :last_name, :class => 'control-label',:required => true %>
          <%= student_parent.text_field :last_name %>
       </div>

  </div> &nbsp;

    <div class="row-fluid">

      <h5> Mother Name </h5>

      <div class="span3">
        <%= student_parent.label :first_name, :class => 'control-label',:required => true %>
        <%= student_parent.text_field :first_name %>
      </div>

      <div class="span3">
        <%= student_parent.label :middle_name, :class => 'control-label'%>
        <%= student_parent.text_field :middle_name %>
      </div>

      <div class="span3">
        <%= student_parent.label :last_name, :class => 'control-label',:required => true %>
        <%= student_parent.text_field :last_name %>
      </div>

    </div> &nbsp;

<% end %>

<div class="form-actions">
  <%= f.button :submit, :class => 'btn-primary' %>
  <%= link_to t('.cancel', :default => t("helpers.links.cancel")),
              students_path, :class => 'btn' %>
</div>

when submit it only build student information in student table and mother information in student_parent table. But it miss the parent information.

I want to submit student entry in student table &  Father and mother entry simultaneously in student_parents table.


Thanks,
Tushar Patil.


bacrossland

unread,
Jul 29, 2013, 12:23:13 PM7/29/13
to rubyonra...@googlegroups.com
I am new to rails, And stuck in this problem from last two days I have a student and student_parent model they have a one-to-many relationship i want to build database attribute through one object from form to datase.

Hi Tushar,

Your controller does not have to only speak to the Student model. You could have it also create the StudentParent entries from the information you got submitted by the form. Once you verify that the Student object and the StudentParent object saved successfully you would return true. A failure in either you would return false with the error that caused the failure.

Thanks,
Bryan
Reply all
Reply to author
Forward
0 new messages