如何在Rails

时间:2016-02-18 20:33:17

标签: ruby-on-rails ruby-on-rails-4 rails-activerecord belongs-to has-one

我有一个带有两个独立模型的rails应用程序,它有两个独立的视图,称为Office和Prospect。

办公室模型:

class Office < ActiveRecord::Base
  has_one :prospect
end

展望模式:

class Prospect < ActiveRecord::Base
  belongs_to :office

  def office_company
    office.try(:company)
  end

  def office_date
    office.try(:office_date)
  end

  def office_company=(company)
    self.office = Office.find_or_create_by(company: company)
  end

  def office_date=(office_date)
    self.office = Office.find_or_create_by(office_date: office_date)
  end
end

Prospect表有一个office_id键。

展望表单视图:

  <!-- Date -->
  <div class="row form-box-outline">
    <div class="form-subheader">Date</div>
    <div class="form-group">
      <%= f.label :Office_Date %>
      <%= f.text_field :office_date, class: "space form-control input-width",
                       'data-provide' => 'datepicker', 'data-date-format' => 'yyyy-mm-dd',
                       'data-date-today-highlight' => 'true', 'data-date-orientation' => 'bottom auto',
                       'data-date-today-btn' => 'linked', 'data-date-autoclose' => 'true',
                       'data-date-keyboard-navigation' => 'false' %>
    </div>
  </div>


  <!-- Prospect Information -->
  <div class="row form-box-outline">
    <div class="form-subheader subform-box-outline">Prospect Information</div>
    <div class="subform-box-outline">
      <div class="form-group ">
        <%= f.label :Company, "Account Prospect" %>
        <%= f.text_field :office_company, class: 'space form-control' %>
      </div>
    </div>

在创建新的Prospect时,我需要访问Office模型上的公司字段和日期字段(以及将来可能还有一两个字段),这对定义的方法没问题。写了。当我保存新的Prospect时会出现问题,两个数据库条目将保存在Office模型中。一个条目与客户和一个日期。 Prospect模型保存了一个条目:一个包含潜在客户信息和office_id密钥。我相信这种情况正在发生,因为两个对象正在创建然后保存。

  1. 结合我的方法的最佳方法是什么,所以我总是在表单视图中创建和更新一个条目?

  2. has_one belongs_to关系是最好的方法吗?我觉得有些阻力,这不是最佳做法或Rails方式。

  3. 我已经尝试使用嵌套属性,但发现每次创建记录时,潜在客户编辑视图都是空白的,包含公司和日期,即使Office表和office_id键上存在该条目在场。

  4. 潜在客户可能是未来的Office,但不是活跃的(客户)Office。办公室可以是活动的,潜在的或不活跃的。我希望用户可以轻松地将Prospect移动到(活动)Office(在Prospect或Office创建期间设置下拉列表),而不是创建具有单独公司名称的Prospect。

  5. Prospect和Office表包含非常不同的信息,但共享少数字段(公司,日期,状态,用户)。 Office表包含所有公司信息(公司名称,地址等)。 Prospect表包含与该Office有关的营销内容。我希望Prospects有一个单独的视图控制器和模型来帮助将它与办公室区分开来。

1 个答案:

答案 0 :(得分:0)

我宁愿使用一个选择框并传入一系列办公室。保存办公室ID和显示公司没有意义。只要您的office_id作为控制器中的参数发送,它将保存id,并且模型中定义的关系将处理活动记录关系。

我认为这就是你所追求的。我会远离在不同的表格中创建两个记录。