【问题标题】:Models not connecting as I think they should be模型没有像我认为的那样连接
【发布时间】:2013-02-24 16:36:39
【问题描述】:

为什么我在 Bids 中的 _form 选择时收到此错误?

=>  undefined method `request_for_proposal' for  
# <ActionView::Helpers::FormBuilder:0x002aaad671c9c8>  

request_for_proposal has_many 出价
出价 belongs_to request_for_proposal

====================================================
Inside views/bids/_form.html.erb

  <div class="field">  
    <%= bid.label :vendor_name %>  
    <%= bid.select :vendor_id, bid.request_for_proposal.vendors.collect { |rfpvi|  
        [rfpvi.friendly_name + "  :  " + rfpvi.rfp_number, rfpvi.id] } %>  
  </div>  

在投标中,我需要通过 RFP 获得“invited_vendors”,以便我以后可以限制或限制可以实际提交投标的供应商。

class Bid < ActiveRecord::Base

  attr_accessible :cost, :request_for_proposal_id, :vendor_id

  belongs_to :request_for_proposal
  belongs_to :vendor
------------------------------------------------

mysql> desc bids;
+-------------------------+---------------+------+-----+---------+----------------+
| Field                   | Type          | Null | Key | Default | Extra          |
+-------------------------+---------------+------+-----+---------+----------------+
| id                      | int(11)       | NO   | PRI | NULL    | auto_increment |
| cost                    | decimal(10,0) | YES  |     | NULL    |                |
| request_for_proposal_id | int(11)       | YES  | MUL | NULL    |                |
| vendor_id               | int(11)       | YES  | MUL | NULL    |                |
| contact_id              | int(11)       | YES  | MUL | NULL    |                |
| created_at              | datetime      | NO   |     | NULL    |                |
| updated_at              | datetime      | NO   |     | NULL    |                |
+-------------------------+---------------+------+-----+---------+----------------+  

================================================
class RequestForProposal < ActiveRecord::Base

  attr_accessible   :rfp_number, :name, :description, :title,
                    :contact_id, :business_owner_id

  has_many   :bids
  has_many   :rfp_vendors
  has_many   :vendors, :through => :rfp_vendors

  has_and_belongs_to_many   :business_owners, :class_name => :Contact,
                            :foreign_key => :business_owner_id
  has_and_belongs_to_many   :evaluators,      :class_name => :Contact,
                            :foreign_key => :evaluator_id
 ----------------------------------------------- 

mysql> desc request_for_proposals;
+----------------------------+--------------+------+-----+---------+----------------+
| Field                      | Type         | Null | Key | Default | Extra          |
+----------------------------+--------------+------+-----+---------+----------------+
| id                         | int(11)      | NO   | PRI | NULL    | auto_increment |
| rfp_number                 | varchar(255) | NO   |     | NULL    |                |
| contact_id                 | int(11)      | YES  |     | NULL    |                |
| vendor_id                  | int(11)      | YES  |     | NULL    |                |
| name                       | varchar(255) | NO   |     | NULL    |                |
| description                | varchar(255) | YES  |     | NULL    |                |
| title                      | varchar(255) | NO   |     | NULL    |                |
| bid_id                     | int(11)      | YES  |     | NULL    |                |
| business_owner_id          | int(11)      | YES  |     | NULL    |                |
| evaluator_id               | int(11)      | YES  |     | NULL    |                |
| created_at                 | datetime     | NO   |     | NULL    |                |
| updated_at                 | datetime     | NO   |     | NULL    |                |
+----------------------------+--------------+------+-----+---------+----------------+

================================================
class Vendor < ActiveRecord::Base

    attr_accessible :friendly_name

    has_many :rfp_vendors
    has_many :request_for_proposals, :through => :rfp_vendors
    has_many :bids
------------------------------------------------

mysql> desc vendors;
+-------------------------+--------------+------+-----+---------+----------------+
| Field                   | Type         | Null | Key | Default | Extra          |
+-------------------------+--------------+------+-----+---------+----------------+
| id                      | int(11)      | NO   | PRI | NULL    | auto_increment |
| friendly_name           | varchar(255) | YES  |     | NULL    |                |
| created_at              | datetime     | NO   |     | NULL    |                |
| updated_at              | datetime     | NO   |     | NULL    |                |
+-------------------------+--------------+------+-----+---------+----------------+

================================================
================================================

mysql> desc bids_contacts;
+------------+---------+------+-----+---------+-------+
| Field      | Type    | Null | Key | Default | Extra |
+------------+---------+------+-----+---------+-------+
| bid_id     | int(11) | NO   |     | NULL    |       |
| contact_id | int(11) | NO   |     | NULL    |       |
+------------+---------+------+-----+---------+-------+

mysql> desc bids_vendors;
+-----------+---------+------+-----+---------+-------+
| Field     | Type    | Null | Key | Default | Extra |
+-----------+---------+------+-----+---------+-------+
| bid_id    | int(11) | NO   |     | NULL    |       |
| vendor_id | int(11) | NO   |     | NULL    |       |
+-----------+---------+------+-----+---------+-------+

mysql> desc rfp_vendors;
+-------------------------+----------+------+-----+---------+----------------+
| Field                   | Type     | Null | Key | Default | Extra          |
+-------------------------+----------+------+-----+---------+----------------+
| id                      | int(11)  | NO   | PRI | NULL    | auto_increment |
| vendor_id               | int(11)  | YES  |     | NULL    |                |
| request_for_proposal_id | int(11)  | YES  |     | NULL    |                |
| created_at              | datetime | NO   |     | NULL    |                |
| updated_at              | datetime | NO   |     | NULL    |                |
+-------------------------+----------+------+-----+---------+----------------+

?????????????????????????????????????????????? ?????

在我克服了无法“看到”request_for_proposals 的烦人问题后,

我需要通过 :through => :rfp_venders 联系供应商。

在联系 Vendors.friendly_name 时我会担心细微差别吗?

【问题讨论】:

    标签: ruby-on-rails has-many-through has-many belongs-to


    【解决方案1】:

    从您显示的 irb 错误来看,您似乎是在表单构建器实例上调用 request_for_proposal,而不是 ActiveRecord 实例本身。

    如果您有form_for @my_instance do |f|,那么在块内f 是一个表单构建器实例,与@my_instance 不是同一个对象;您应该使用@my_instancef.object 来访问ActiveRecord 实例。

    【讨论】:

    • 感谢 bloopletech。我只是将其更改为:
      但是现在的错误是:#<0x002aaae01b18d0>
    猜你喜欢
    • 2019-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-09
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 2011-09-29
    相关资源
    最近更新 更多