首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Rails中正确保存从belongs_to到has_one的关系

如何在Rails中正确保存从belongs_to到has_one的关系
EN

Stack Overflow用户
提问于 2016-02-18 20:33:17
回答 1查看 435关注 0票数 0

我有一个rails应用程序,它有两个独立的模型,具有两个单独的视图,名为Office和Office。

办公室模式:

代码语言:javascript
复制
class Office < ActiveRecord::Base
  has_one :prospect
end

前景模式:

代码语言:javascript
复制
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

展望表有一个office_id键。

前景表格视图:

代码语言:javascript
复制
  <!-- 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>

在创建一个新的展望时,我需要访问Office模型上的公司字段和日期字段(在将来可能还需要一个或两个字段),这与我编写的定义方法没有问题。当我保存一个新的展望时,将两个数据库条目保存在Office模型中,问题就会出现。一项与客户有关,一项为日期。展望模型保存了一个条目:一个带有Prospect信息和office_id键。我相信这是因为两个对象正在被创建,然后被保存。

  1. 合并我的方法的最佳方法是什么,所以我总是在我的表单视图中每个创建和更新一个条目?
  2. has_one belongs_to关系是最好的方法吗?我感觉到一些阻力,认为这不是最好的实践或铁路的方式。
  3. 我已经尝试过使用嵌套属性,但发现每次创建记录时,尽管office_id和office_id键上都存在条目,但prospect编辑视图与公司和日期都是空白的。
  4. 展望是一个可能的未来办公室,但不是主动(客户)办公室。办公室可以是活跃的,也可以是潜在的或不活跃的。我希望用户可以轻松地将Office移动到一个(活动的) Office中(这是在展望或Office创建期间用下拉列表设置的),而不是用单独的公司名称创建Office。
  5. of和Office表包含了非常不同的信息,但是共享了一些字段(公司、日期、状态、用户)。Office表包含所有公司信息(公司名称、地址等)。展望表包含与该办公室相关的营销信息。我希望前景有一个单独的视图控制器和模型,以帮助区分它和办公室。
EN

回答 1

Stack Overflow用户

发布于 2016-02-19 07:54:38

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

我想这就是你想要的。我不会在不同的桌子上创建两张唱片。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35491859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档