0

Мои отношения:не удается вставить данные, используя пользовательское действие по тяготеет имеет много отношений рельсам

class PrivateClass < ActiveRecord::Base 
    has_many :lesson_plans 
end 

class LessonPlan < ActiveRecord::Base 
    belongs_to :private_class 
end 

Моя форма как:

<%= form_tag (add_lesson_plan_teacher_teacher_private_school_private_class_path), remote: true do %> 
    <div class="row"> 
     <div class="col-sm-6"> 
     <div class="form-group"> 
      <%= label_tag :title, nil, :class => "control-label" %> 
      <%= text_field_tag "private_class[lesson_plan][title]", "", class: "form-control first_input", required: true, style: "width: 210%;" %> 
     </div> 
     <div class="form-group"> 
      <%= label_tag :description, nil, :class => "control-label" %> 
      <%= text_area_tag "private_class[lesson_plan][description]", "", placeholder: "Enter Description Here", class: "form-control", rows: "3", required: true, style: "width: 210%;" %> 
     </div> 
     <div class="form-group"> 
      <%= label_tag :notes, nil, :class => "control-label" %> 
      <%= text_area_tag "private_class[lesson_plan][notes]", "", placeholder: "Enter Notes Here", class: "form-control", rows: "3", required: true, style: "width: 210%;" %> 
     </div> 
     <div class="form-group"> 
      <%= submit_tag "Create lesson plan", :class => "btn btn-info" %> 
     </div> 
     </div> 
    </div> 
<% end %> 

Мой контроллер:

class Teacher::PrivateClassesController < ApplicationController 

    before_action :authenticate_user! 
    before_action :set_teacher 
    before_action :set_private_school 
    before_action :set_private_class 

    def add_lesson_plan 
    @lesson_plan = @private_class.lesson_plans.new(private_class_params).save 
    end 

    private 

    def private_class_params 
    params.require(:private_class).permit! 
    end 

    def set_teacher 
    @teacher = Teacher.friendly.find(params[:teacher_id]) 
    end 

    def set_private_school 
    @private_school = PrivateSchool.friendly.find(params[:private_school_id]) 
    end 

    def set_private_class 
    @private_class = PrivateClass.find(params[:id]) 
    end 
end 

маршруты:

resources :private_schools do 
     resources :private_classes do 
      member do 
      get :lesson_plan 
      post :lesson_plan 
      post :add_lesson_plan 
      end 
     end 
     end 

Теперь проблема заключается в том, что, когда я пытаюсь вставить данные в планах уроков таблицы он говорит:

ActiveRecord::UnknownAttributeError (unknown attribute 'lesson_plan' for LessonPlan.): 
    app/controllers/teacher/private_classes_controller.rb:11:in `add_lesson_plan' 

Что мне нужно сделать, это ввести данные поля плана урока в плане урока таблицу с private_class_id Если что-нибудь неправильно, пожалуйста, поправьте меня.

UPDATE

здесь результаты Кладет заявления:

def add_lesson_plan 
    puts params.inspect, '++++++++++++++++++++++++' 
    puts @private_class.lesson_plans.new.inspect, '**************************************' 
    @lesson_plan = @private_class.lesson_plans.new(private_class_params).save! 
    end 

{"utf8"=>"✓", "private_class"=>{"lesson_plans"=>{"title"=>"ggd", "description"=>"gghh", "notes"=>"gggkd"}}, "commit"=>"Create lesson plan", "controller"=>"teacher/private_classes", "action"=>"add_lesson_plan", "teacher_id"=>"carmel-cynthia", "private_school_id"=>"dr-jasmine-e-mcnair-high-school", "id"=>"1"} 
++++++++++++++++++++++++ 
#<LessonPlan id: nil, title: nil, description: nil, notes: nil, subject_id: nil, teacher_id: nil, created_at: nil, updated_at: nil, is_private: true, is_publish: false, user_id: nil, publish_date: nil, popularity_count: 0, is_special: false, private_class_id: 1> 
************************************** 

ответ

1

params:

{"utf8"=>"✓", "private_class"=>{"lesson_plans"=>{"title"=>"ggd", "description"=>"gghh", "notes"=>"gggkd"}}, "commit"=>"Create lesson plan", "controller"=>"teacher/private_classes", "action"=>"add_lesson_plan", "teacher_id"=>"carmel-cynthia", "private_school_id"=>"dr-jasmine-e-mcnair-high-school", "id"=>"1"} 

метод private_class_params, вероятно, возвращающие:

{"lesson_plans"=>{"title"=>"ggd", "description"=>"gghh", "notes"=>"gggkd"}} 

но вы на самом деле нужно содержание lesson_plans, поэтому изменить его на:

def private_class_params 
    params.require(:private_class).permit![:lesson_plans] 
end 

или скорректировать форму, чтобы отправить его в ожидаемой форме;)

EDIT

params.require(:private_class).permit! возвращает содержимое ключа private_class, который является хешем ... затем [:lesson_plans] возвращает содержимое lesson_plans ключа в этом хэше, которые являются атрибутами, которые вы необходимо создать объект ...

Вы можете попробовать следующее в консоли, чтобы понять:

params = {"utf8"=>"✓", "private_class"=>{"lesson_plans"=>{"title"=>"ggd", "description"=>"gghh", "notes"=>"gggkd"}}, "commit"=>"Create lesson plan", "controller"=>"teacher/private_classes", "action"=>"add_lesson_plan", "teacher_id"=>"carmel-cynthia", "private_school_id"=>"dr-jasmine-e-mcnair-high-school", "id"=>"1"} 
#=> {"utf8"=>"✓", "private_class"=>{"lesson_plans"=>{"title"=>"ggd", "description"=>"gghh", "notes"=>"gggkd"}}, "commit"=>"Create lesson plan", "controller"=>"teacher/private_classes", "action"=>"add_lesson_plan", "teacher_id"=>"carmel-cynthia", "private_school_id"=>"dr-jasmine-e-mcnair-high-school", "id"=>"1"} 
params['private_class'] # similar to the result of your private_class_params method 
#=> {"lesson_plans"=>{"title"=>"ggd", "description"=>"gghh", "notes"=>"gggkd"}} 
params['private_class']['lesson_plans'] # the attributs you actually need 
#=> {"title"=>"ggd", "description"=>"gghh", "notes"=>"gggkd"} 
+0

Если вы не ум могли бы вы объяснить '[: lesson_plans]'? Кроме того, пожалуйста, добавьте источник рубинового документа. :) Я имею в виду, что именно делает '[: lesson_plans]' делает? – LearningROR

+1

Я отредактировал свой ответ ... надеюсь, это поможет;) – gabrielhilal

+0

Большое спасибо. Ты действительно сделал свой день. :) Оставайтесь Блаженными. Хотел бы я дать вам 10 UP. – LearningROR

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