2013-06-27 2 views
-2

Я делаю раздел приема в своем приложении, который должен иметь 3 шага, 1-й шаг - данные о студенте, 2-й шаг - подробности опекуна, 3-й шаг - учащийся предыдущий данные, шаг 1 и 2 были сделаны успешно, проблема, я не могу добраться до третьей формы, когда я нажмите кнопку Сохранить и продолжитьНевозможно добраться до следующей формы 'RoR 3+'

Примечания: существует связь между учеником и student_previous_data студента HAS_ONE student_previous_data и нет никакой связи между опекуны и учащиеся предыдущие данные

студенческая форма перенаправляет меня к форме опекунов, а форма хранителей должна перенаправлять меня на предыдущие данные ученика для м, но это не

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 , :guardians_attributes , 
        :student_previous_data_attributes 

    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 
    accepts_nested_attributes_for :guardians 
    accepts_nested_attributes_for :student_previous_data 
end 

student_previous_data.rb

class StudentPreviousData < ActiveRecord::Base 
    attr_accessible :course, :institution, :school_id, :student_id, :total_mark, :year, :student_id 
    belongs_to :student 
end 

guardians_controller.rb

class GuardiansController < ApplicationController 
    def index 
    @guardian = Guardian.all 
    end 

    def show 
    @guardian = Guardian.find(params[:id]) 
    end 

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

    def create 
    @guardian = Guardian.new(params[:guardian]) 
    if @guardian.save 
     flash[:success] = ' Parent Record Saved Successfully. Please fill the Additional Details.' 
     redirect_to controller: 'student_previous_data', action:'new', id: @student.id 
    else 
     flash.now[:error] = 'An error occurred please try again!' 
     render 'new' 
    end 
    end 

    def edit 
    end 
end 

student_previous_data_controller.rb

class StudentPreviousDataController < ApplicationController 
    def index 
    @student_previous_data = StudentPreviousData.all 
    end 

    def show 
    @student_previous_data = StudentPreviousData.find(params[:id]) 
    end 

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

    def create 
    @student_previous_data = StudentPreviousData.new(params[:student_previous_data]) 
    if @student_previous_data.save 
     flash[:success] = 'Record Saved Successfully.' 
     redirect_to '/user/dashboard' 
    else 
     flash.now[:error] = 'An error occurred please try again!' 
     render 'new' 
    end 
    end 

    def edit 
    end 

end 

routes.rb

get "student_previous_data/index" 

    get "student_previous_data/show" 

    get "student_previous_data/edit" 

    get "guardians/index" 

    get "guardians/show" 

    get "guardians/edit" 

    get "students/index" 

    get "students/show" 

    get "students/edit" 

    resources :articles do 
    resources :comments 
    end 
    resources :users 
    resources :students do 
    resources :student_previous_data 
    resources :guardians 
    end 
    resources :sessions 
    get '/user/dashboard', to: 'static_pages#home' 
    get '/student/admission1' , to: 'students#new' 
    get '/student/admission2' , to: 'guardians#new' 
    get '/student/admission3' , to: 'student_previous_data#new' 


    root to: 'sessions#new' 

student_previous_data/new.html.erb

<%= bootstrap_form_for(@student_previous_data, :url => student_student_previous_datum_path(@student), 
          html: { class: 'form-horizontal' }, method: :post) do |f| %> 
     <% if @student_previous_data.errors.any? %> 
      <div id="error_explanation"> 
       <div class="alert alert-error"> 
       The form contains <%= pluralize(@student_previous_data.errors.count, 'error') %> 
       </div> 
       <ul> 
       <% @student_previous_data.errors.full_messages.each do |msg| %> 
        <li>* <%= msg %></li> 
       <% end %> 
       </ul> 
      </div> 
     <% end %> 

     <fieldset> 
      <div class="field"> 
      <%= f.hidden_field :student_id, value: @student.id %> 

      </div> 

      <h4>Previous Educational Details</h4> 
      <div class="field"> 
      <%= f.text_field :institution, label: 'Institution Name'%> 
      </div> 
      <div class="field"> 
      <%= f.text_field :course, label: 'Course'%> 
      </div> 
      <div class="field"> 
      <%= f.text_field :year, label: 'Year'%> 
      </div> 
      <div class="field"> 
      <%= f.text_field :total_mark, label: 'Total Mark'%> 
      </div> 
      <div class="actions"><%= f.submit 'Save & Proceed', class: 'btn btn-mini btn-primary' %></div> 
     </fieldset> 
    <% end %> 
    </div> 
</div> 

ошибка я получаю:

 RuntimeError in GuardiansController#create 

    Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id 
app/controllers/guardians_controller.rb:19:in `create' 

после использования решения Марека Липка, я получил следующая ошибка (ПОЛНАЯ ОШИБКА):

Routing Error 

No route matches {:action=>"show", :controller=>"student_previous_data", :student_id=>#<Student id: 13, admission_no: "587", class_roll_no: nil, admission_date: nil, first_name: "", middle_name: "", last_name: "", date_of_birth: nil, gender: "Male", blood_group: "Unknown", birth_place: "", language: "", religion: nil, address_line1: "", address_line2: "", city: "", post_code: "", phone1: "", phone2: "", email: "", created_at: "2013-06-28 02:12:46", updated_at: "2013-06-28 02:12:46", country_id: nil, user_id: nil, school_id: nil, nationality_id: nil, passport_number: nil, has_paid_fees: nil, enrollment_date: nil, batch_id: nil>} 

Try running rake routes for more information on available routes. 

и после запуска рек маршрутов я получил это:

new_student_student_previous_datum GET /students/:student_id/student_previous_data/new(.:format)  student_previous_data#new 

и также, что мой student_previous_data/new.html.erb

<h1>Admission</h1> 
<h4>Step 3 - Previous details</h4> 

<div class="row-fluid"> 
    <div class="span5 offset1 hero-unit"> 
    <%= bootstrap_form_for(@student_previous_data, :url => student_student_previous_datum_path(@student), 
          html: { class: 'form-horizontal' }) do |f| %> 
     <% if @student_previous_data.errors.any? %> 
      <div id="error_explanation"> 
       <div class="alert alert-error"> 
       The form contains <%= pluralize(@student_previous_data.errors.count, 'error') %> 
       </div> 
       <ul> 
       <% @student_previous_data.errors.full_messages.each do |msg| %> 
        <li>* <%= msg %></li> 
       <% end %> 
       </ul> 
      </div> 
     <% end %> 

     <fieldset> 
      <div class="field"> 
      <%= f.hidden_field :student_id, value: @student.id %> 

      </div> 

      <h4>Previous Educational Details</h4> 
      <div class="field"> 
      <%= f.text_field :institution, label: 'Institution Name'%> 
      </div> 
      <div class="field"> 
      <%= f.text_field :course, label: 'Course'%> 
      </div> 
      <div class="field"> 
      <%= f.text_field :year, label: 'Year'%> 
      </div> 
      <div class="field"> 
      <%= f.text_field :total_mark, label: 'Total Mark'%> 
      </div> 
      <div class="actions"><%= f.submit 'Save & Proceed', class: 'btn btn-mini btn-primary' %></div> 
     </fieldset> 
    <% end %> 
    </div> 
</div> 

ТАК, как это исправить ???

+0

Какой файл/строка делает эту точку ошибки? –

+0

приложение/контроллеры/guardians_controller.rb: 19: в 'создать», в создании действия –

ответ

0

Попробуйте изменить этот

new_student_student_previous_datum_path(@student) 

в

new_student_student_previous_datum_path(student_id: @student.id) 

если он все еще бросает ошибка, вставьте мне полную ошибку маршрутизации.

UPDATE:

ошибка в представлении этого URL для формы в настоящее время является

Это одна порождает погрешность: действия: «шоу»

изменить его

new_student_student_previous_datum_path (@student)

<%= bootstrap_form_for(@student_previous_data, :url => new_student_student_previous_datum_path(@student), 
         html: { class: 'form-horizontal' }, :method => "post") do |f| %> 

новые и создают действия одни и те же пути, но действие определяется методом запроса пост или получить

+0

та же ошибка, и я обновил свой вопрос с помощью FULL ERROR, как вы сказали –

+0

Проблема в view – ArtDlrt

+0

Такая же ошибка при добавлении метода post <% = bootstrap_form_for (@student_previous_data,: url => student_student_previous_datum_path (@student), html: {class: 'form-horizontal'}, method:: post) do | f |% > –

1

Вы должны установить переменную экземпляра @student - ошибка возникает, поскольку она равна nil. Вы можете сделать это в before_filter, например:

class GuardiansController < ApplicationController 
    before_filter :set_student, :only => [:new, :create] # specify in which actions you need this here 
    # ... 
    private 
    def set_student 
     @student = Student.find params[:student_id] 
    end 
    # .. 
end 

Когда это будет сделано, вы можете удалить @student = Student.find(params[:student_id]) из вашего new действия, как это уже установлено в before_filter.

Более того, в вашем GuardiansController, а также StudentPreviousDataController, у вас есть студент представлены парами по имени student_id, так что ваше Перенаправление должно быть:

redirect_to controller: 'student_previous_data', action:'new', student_id: @student.id 
+0

просто добавил ваш код и сделать, как вы сказали, без редактирования других линий, и я получил эту ошибку 'Маршрутизация Ошибка Нет маршрута match {: action => "show",: controller => "student_previous_data",: student_id => # } ' ПРИМЕЧАНИЕ: он должен перенаправить меня на предыдущие_данные форма, которую я построил –

+0

Да, это потому, что у вас есть еще одна ошибка в этой строке. Проверьте мой обновленный ответ. –

+0

только что добавил 'redirect_to new_student_student_previous_datum_path (@student)', но ту же ошибку, что я пропал ??? :( –