2013-06-25 2 views
-1

, пожалуйста, мне нужна помощь! похоже, что моя ассоциация работает неправильно, но я не могу найти, что не так. У меня есть отношение между учеником и опекуном, у ученика много опекунов и опекунов принадлежит ученикуошибка в отношении между двумя моделями - рубин на рельсах 3

Я не могу получить номер приема, который вставил в форму студента, в форму хранителей, похоже, никакого отношения, но я не могу решить Это !

Я не знаю, почему пользователи голосуют за мой вопрос! : 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

Самое первое дело в том, что, как ваша модель опекуны предполагает, вы не имеете никакого поля для хранения ссылок студента я предполагаю , Итак, добавьте сначала, как добавить поле student_id в модель опекунов. Также у вас нет поля admmission_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%> 

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

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

Надеюсь, это вам поможет.

+0

NoMethodError в Guardians # нового неопределенного метода 'слияния» для „301“: String Извлеченные источник (около линии № 63): 60:

61: 62: <%= f.label 'Student Admission number' %> 63: <%= f.text_field :admission_no, @student.admission_no %> 64: 65:

+0

эй я получил эту работу я нашел недостающий Шоуд быть, как это >> > <% = f.text_field: admission_no, value: @ student.admission_no%> –

+0

извините ... я пропустил часть ценности :(.... отредактировал мой ответ – vikram

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-форме.

В опекуны/new.html.erb, вам необходимо изменить

<%= form_for(@guardian, :url => student_guardians_path(params[:student_id]), :method => 'post') do |f| %> 
+0

undefined method 'guardians_path' для # <# <Класс: 0xaf28988> в этой строке <% = form_for @guardian do | f | %> –

+0

проверить отредактированный ответ – vikram

+0

отредактированный ответ еще не принят –

Смежные вопросы