Не може да се създаде form_for свързани модели

Пиша просто уеб приложение, което обичам да наричам 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

person cojoj    schedule 11.12.2013    source източник
comment
Когато използвате save, трябва да проверите булевия резултат. Можете да опитате да използвате save! вместо save, това ще предизвика изключение, ако обектът не може да бъде запазен, което показва грешката.   -  person Baldrick    schedule 11.12.2013
comment
Добре, разбирам го, но все още не е проблемът, с който се справям...   -  person cojoj    schedule 11.12.2013


Отговори (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 %>

В Project Model add

accepts_nested_attributes_for :students
person jbmyid    schedule 11.12.2013
comment
добавили ли сте nested_form gem в gem файл, ако да, тогава каква грешка получавате? - person jbmyid; 12.12.2013