【问题标题】:Add item to an array table colum during create在创建期间将项目添加到数组表列
【发布时间】:2016-03-30 23:05:56
【问题描述】:

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

...

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 推送到报价单上。想法?控制台图片:

【问题讨论】:

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


    【解决方案1】:

    一个报价有很多公司,一个公司有很多报价?如果这是真的,那么你有一个 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

    【讨论】:

    • 嗨。我懂了。在这种情况下,客户可以选择 x 数量的公司进行投标,但如何分配这些公司:@quote = current_user.quotes.build(quote_params.push({:company_id => company_id}))
    • 在您的控制器中,您必须在复数和数组中使用它,因为这是一个 has_many 关系,例如{ company_ids => [8] }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-12
    • 1970-01-01
    • 2020-08-12
    • 2011-07-10
    • 2014-03-13
    • 2022-06-29
    相关资源
    最近更新 更多