rails将记录从一个表插入到具有匹配属性的另一个表

时间:2014-03-21 04:50:32

标签: ruby-on-rails

我真的是铁杆新秀。现在我正在做一个关于客户管理的项目。基本上,应用程序管理项目的三个阶段,销售,报价和项目。在联系人索引页面中,对于选定的任何特定联系人,link_to按钮应将客户信息发送到销售表或报价表或项目表。创建新销售,报价或项目的另一种方法是使用Rails CRUD函数手动添加新项目。下面是联系索引页面,我切了右上角,让你看看功能是如何设置的。

index for contacts table

我有两个问题。首先,当我点击(销售/去)按钮时,显示在销售中成功创建的记录,但所有字段都为空,空值,在销售索引页面中,在表格底部添加一个空行。第二,我不知道如何在销售模型中添加两​​个功能'创建'功能,一个允许用户通过点击go按钮通过联系索引页面添加销售联系人,另一个允许用户使用销售新功能创建新记录。

以下是联系人和销售模型,控制文件,routes.rb和联系人索引。

class Contact < ActiveRecord::Base

    has_many :sales,:dependent => :destroy
    has_many :quoters,:dependent => :destroy
    has_many :projects,:dependent => :destroy

class Sale < ActiveRecord::Base

belongs_to :contact

Quote::Application.routes.draw do

  match '/create',  :to => 'sales#create/:id'  , :as => :create 

触点/ index.html.erb

<td><%= link_to raw("Go <span class=\"glyphicon glyphicon-share-alt\"></span>"), sales_path(:contact_id => contact), :class=> "btn btn-xs btn-primary ", method: :post%></td>

如果我使用以下销售模式,那么我在销售表中添加了空行。

class Sale < ActiveRecord::Base

    belongs_to :contact

类SalesController&lt; ApplicationController中

  def create

    contact =  Contact.find(params[:contact_id])

    @sale = Sale.create(@contact)

如果我使用@sale = Sale.new(contact.attributes.slice(:firstName,:lastName))

,结果相同

如果我使用替代以下销售模式,那么我得到了#34;无法批量分配受保护的属性:id,project,created_at,updated_at,project_ID,Social_Media,Website,Ext,Category&#34;,另外我要澄清的是联系表有不同的字段和销售表,所有不同的字段都已经列出我上面发布的异常投放。

class Sale < ActiveRecord::Base

    belongs_to :contact

类SalesController&lt; ApplicationController中

  def create

    contact =  Contact.find(params[:contact_id])

    @sale = Sale.create(contact.attributes)

如果我使用@sale = Sale.create(联系人)

,结果相同

我的环境ruby 1.9.3p392和rails 3.2.13

1 个答案:

答案 0 :(得分:0)

我找到了出路,如果有人遇到同样的情况,可能会有一些提示。

处理这两个问题的方法:

class SalesController < ApplicationController

  def create

    unless params[:contact_id].nil?
      @contact =  Contact.find(params[:contact_id]) 
      @sale = Sale.create(@contact.attributes.slice(*Sale.accessible_attributes))
    else
      @sale = Sale.new(params[:sale])
    end

    respond_to do |format|
      if @sale.save
        format.html { redirect_to @sale, notice: 'Sale was successfully created.' }
        format.json { render json: @sale, status: :created, location: @sale }
      else
        format.html { render action: "new" }
        format.json { render json: @sale.errors, status: :unprocessable_entity }
      end
    end
  end
end