simple_form 有两个模型?

simple_form with two models?

这是我为客户模型创建的表格。

在填充 customers table 时,我也在 managers table 中插入了一些数据。但是我想在这个 simple_form 中添加一个 date picker 但是 date 只存储在 Manger 模型中,而 Customer 模型没有日期字段。我该怎么做?我有哪些替代选择?

new.html.erb

<%= stylesheet_link_tag "customers" %>
  <div class="row">
    <div class="panel panel-default center" id="new-width">
      <div class="panel-body">
        <%= simple_form_for @customer do |f| %>
          <%= f.input :name,:autocomplete => :off %>
          <%= f.input :principalAmount,:autocomplete => :off %>
          <%= f.input :interestRate %>
          <%= f.input :accountType %>
          <%= f.input :duration,:autocomplete => :off %>
          <%= f.button :submit %>
        <% end %>
      </div>
    </div>
</div>

编辑:Manager 模型有许多独立于 Customer 模型的字段。但是当创建客户时,它必须在 Manager 模型中添加日期,而 Customer 模型中没有。

我建议您在客户模型中使用 accepts_nested_attributes_for。 像这样:

在客户模型中,

accepts_nested_attributes_for :managers

在视图页面中,在现有表单内

<%= f.fields_for :managers do |m| %>
    <%= m.date_field :date %>
<% end %>

您始终可以将 getter 和 setter 添加到客户模型并手动设置经理字段。同样,这取决于与经理的关系,如果它已经存在等等,但要点是您可以创建方法,然后可以作为客户方法在表单中访问。

# in customer.rb

def manager_date=(date)
  manager.date = date
end

def manager_date
  manager.date
end

然后在表格中

<%= f.input :manager_date %>

注意 - 这是一个简短的示例,您需要将管理器保存在某个地方,在更新客户之前或之后执行此操作将取决于您的需要。

另一种方法是在 customer 中为 manager_date 创建一个 attr_accessor,如果存在,则在保存客户后更新管理器

after_save :update_manager

def update_manager
  manager.date = manager_date
  manager.save
end