simple_form有两个型号?

时间:2016-12-13 16:59:28

标签: ruby-on-rails model-view-controller simple-form

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

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

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模型中不存在的日期。

2 个答案:

答案 0 :(得分:2)

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

在客户模型中,

accepts_nested_attributes_for :managers

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

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

答案 1 :(得分:2)

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

# in customer.rb

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

def manager_date
  manager.date
end

然后以表格

<%= f.input :manager_date %>

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

另一种方法是在客户中为manager_date创建一个attr_accessor,如果在那里,在客户保存后更新经理

after_save :update_manager

def update_manager
  manager.date = manager_date
  manager.save
end