在创建期间将项添加到数组表colum

时间:2016-03-30 23:05:57

标签: ruby-on-rails postgresql ruby-on-rails-4

我使用postgres有一个quote表列作为数组:

...

t.integer  "company_id", array: true, default: []

...

基本上,我说的是这么多公司的报价。这就像一个招标,很多企业可以报价。

quote.rb:

has_many :companies

company.rb中没有设置任何内容。

user.rb:

has_many :quotes
has_one :company # depending on registration type

流程是,用户可以邀请多家公司对报价进行出价,其中company_id每个都作为params传递。我可以创建报价,但company_id未保存:

def create
  company_id = 8 # hard coded for now
  @quote = current_user.quotes.build(quote_params.push({:company_id => company_id}))

...
end

private
 def quote_params
  params.require(:quote).permit(:a, :b, :company_id => [])
 end

我无法将company_id推到引号上。想法?控制台的图片:

enter image description here

1 个答案:

答案 0 :(得分:0)

报价有很多公司,公司有很多报价?如果这是真的,那么你有一个N对N关系,你应该有一个关系模型。

这种关系模型在没有更好的情况下会被命名为CompanyQuote,在您的情况下似乎可以使用Bid。然后你必须把它们联系起来。

class Quote
  has_many :bids
  has_many :companies, through: :bids
  # ...
end

class Company
  has_many :bids
  has_many :quotes, through: :bids
  # ...
end

class Bid
  belongs_to :company
  belongs_to :quote
  # ...
end

class QuotesController
  def create
    company_id = 8 # hard coded for now
    @quote = current_user.quotes.build(quote_params.push({:company_ids => [company_id]}))

  ...
  end

  private

  def quote_params
   params.require(:quote).permit(:a, :b, :company_ids => [])
  end
end

查看documentation