Не могу создать форму для связанных моделей

Я пишу простое веб-приложение, которое мне нравится называть PMS (Система управления проектами). В этом приложении у меня есть 2 модели проектов и студентов. Я установил (я думаю... потому что я новичок) связь между этими двумя моделями. В проектах много учеников, но ученик принадлежит одному проекту (возможно, со временем он изменится).

Но моя проблема в том, чтобы все работало вместе. Я не знаю, как я могу вставить новых студентов в новую форму проекта. Я перепробовал все и еще ничего!

Вот мои исходные файлы:

Контролер проектов:

class ProjectsController < ApplicationController
  def show
    @projects = Project.all
  end

  def create
    @project = Project.new(project_params)
    @project.status = "Waiting"
    @project.save
    redirect_to root_path
  end

  private
    def project_params
      params.require(:project).permit(:title, :lecturer)
    end
end

Контролер студентов:

class StudentsController < ApplicationController
  def create
    @project = Project.find(params[:project_id])
    @student = @project.students.create(params[:student])
    @student.save
  end
end

Модели:

class Project < ActiveRecord::Base
  has_many :students
end

class Student < ActiveRecord::Base
  belongs_to :project
end

Посмотреть:

Добавить новый проект

<%= form_for :project, url: projects_path do |f| %>
    <p>
        <%= f.label :title %>
        <%= f.text_field :title %>
    </p>
    <p>
        <%= f.label :lecturer %>
        <%= f.text_field :lecturer %>
    </p>
        <%= form_for([@project, @project.students.build]) do |s| %>
          <p>
            <%= s.label :name %><br />
            <%= s.text_field :name %>
          </p>
        <% end %>
    <p>
        <%= f.submit %>
    </p>
<% end %>

Маршруты:

RoRPMS::Application.routes.draw do
  # You can have the root of your site routed with "root"
  root 'projects#show'

  resources :projects do
    resources :students
  end
end

1 ответ

Вы также можете использовать "nested_form" для создания проекта со студентами

<%= nested_form_for @project do |f| %>
    <p>
        <%= f.label :title %>
        <%= f.text_field :title %>
    </p>
    <p>
        <%= f.label :lecturer %>
        <%= f.text_field :lecturer %>
    </p>
        <%= fields_for :students do |s| %>
          <p>
            <%= s.label :name %><br />
            <%= s.text_field :name %>
          </p>
        <% end %>
        <%= f.link_to_add "Add new student", :students %>
    <p>
        <%= f.submit %>
    </p>
<% end %>

В модель проекта добавить

accepts_nested_attributes_for :students
Другие вопросы по тегам