Я создаю приложение Rails, которое выполняет следующее: пользователь может создавать новый проект, и внутри каждого проекта он может создавать разные документы.
Я начинаю строить его из внешнего слоя (т.е.Я сначала хочу иметь возможность создавать, обновлять, удалять проект, прежде чем начинать кодировать часть документов).
У меня есть следующая проблема: я закодировал действие new и create для project_controllers
, ноновый объект не сохраняется.(Он не отображается в index.html.erb
, а _form.html.erb
продолжает рендеринг, что означает, что он не сохраняется)
Я думаю, что проблема в том, что проект has_many
Papers, и, поскольку я еще не закодировалБумажная часть, это создает проблемы.НО я не уверен, что это правильный ответ.
project.rb
class Project < ApplicationRecord
has_many :papers, dependent: :destroy
belongs_to :user
end
project_controller.rb
class ProjectsController < ApplicationController
before_action :set_project, only: [:show, :edit, :update, :destroy]
def index
@projects = Project.all
end
def show
end
def new
@project = Project.new
end
def create
@project = Project.new(project_params)
@project.save
if @project.save
redirect_to projects_path()
else
render :new
end
end
def edit
end
def update
@project.update(project_params)
redirect_to project_path(@project)
end
def destroy
@project.destroy
redirect_to projects_path
end
private
def project_params
params.require(:project).permit(:title, :body)
end
def set_project
@project = Project.find(params[:id])
end
end
new.html.erb
<%= render 'form', project: @project %>
_form.html.erb
<div class="container">
<div class="row ">
<div class="col-sm-4 col-sm-offset-4">
<%= form_for(@project) do |f| %>
<div class="form-group">
<%= f.label :title, "Title of the Project"%>
<%= f.text_field :title, as: :string, class: 'form-control'%>
</div>
<div class="form-group">
<%= f.label :body, "Description of the Project"%>
<%= f.text_area :body, rows: 20, class: 'form-control' %>
</div>
<%= f.submit "Confirm", class:"btn btn-secondary btn-lg" %>
<% end %>
</div>
</div>
</div>