2016-12-26 78 views
-1

我有问题。Ruby on rails,将数据保存在两个表中

我有这样的模式:

class Project < ApplicationRecord 
    has_many :documents 
    belongs_to :course_unit 
    belongs_to :user 
    has_and_belongs_to_many :people 
    has_one :presentation 
    has_and_belongs_to_many :supervisors, :class_name => "Person", :join_table => :projects_supervisors 
end 

而这种模式:

class Presentation < ApplicationRecord      
    belongs_to :project 
    has_and_belongs_to_many :juries, :class_name => "Person", :join_table => :juries_presentations 
end 

当我创建一个新的项目,我有模型项目的许多属性和两个属性(室和日期)从演示模型,所以我不知道如何将数据从房间和日期属性发送到演示文稿模型。

所以我的问题是:如何创建一个新的项目,保存项目表和演示文稿表中的数据?

更新#1

我的项目负责人:

def new 
    @project = Project.new 
end 

def edit 
end 

def create 
    @project = Project.new(project_params) 
    @project.build_presentation 
    respond_to do |format| 
    if @project.save 
     format.html { redirect_to @project, notice: 'Project was successfully created.' } 
     format.json { render :show, status: :created, location: @project } 
    else 
     format.html { render :new } 
     format.json { render json: @project.errors, status: :unprocessable_entity } 
    end 
    end 
end 

def update 
    respond_to do |format| 
    if @project.update(project_params) 
     format.html { redirect_to @project, notice: 'Project was successfully updated.'} 
     format.json { render :show, status: :ok, location: @project } 
    else 
     format.html { render :edit } 
     format.json { render json: @project.errors, status: :unprocessable_entity } 
    end 
    end 
end 

private 

def set_project 
    @project = Project.find(params[:id]) 
end 

def project_params 
    params.require(:project).permit(:title, :resume, :github, :grade, :project_url, :date, :featured, :finished, :user_id, :course_unit_id, presentation_attributes: [ :date , :room ]) 
end 

的项目我的指数的看法是:

<%= form_for @project do |f| %> 
    <%= f.fields_for :presentations do |ff| %> 
    <%= ff.label :"Dia de Apresentação" %> 
    <%= ff.date_field :date %> 
    <%= ff.label :"Sala de Apresentação" %> 
    <%= ff.text_area :room %> 
    <% end 
    <%= f.submit %> 
<% end %> 

回答

1

你可以尝试这样的事情:

project = Project.new(name: 'project 1') 
project.build_presentation(room: 'room 1', date: Time.current) 
project.save 

它将保存项目名称project 1和演示文稿属于该项目,与房间room 1和日期是Time.current

而且您需要更新模型以避免出现验证。

class Project < ApplicationRecord 
    has_one :presentation, inverse_of: :project 
end 

class Presentation < ApplicationRecord 
    belongs_to :project, inverse_of: :presentation 
end 
+0

在项目控制器中? –

+0

是的,它可以用于创建操作。 – Thanh

+0

好,它现在工作,现在我需要不是静态xD。我需要插入查看数据 –