2016-12-13 3 views
0

Это моя форма создания для модели клиента.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> 

Edit: Manager модель имеет много поля, которое не зависит от Customer модели. Но когда клиент создается, он должен добавить дату в Manager модели, которая отсутствует в модели Customer.

+0

Этот вопрос очень размыто. Я предполагаю, что вы имеете в виду менеджера. Какова связь между моделью клиента и отношения? Каков фактический желаемый результат? – max

ответ

2

Я предлагаю вам использовать модель accepts_nested_attributes_for в модели клиентов. Что-то вроде этого:

В модели клиента,

accepts_nested_attributes_for :managers 

В странице просмотра, внутри существующей формы

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

Как получить доступ к этому вложенному значению поля в контроллере? – InQusitive

+0

params будут как {customers: {name: "foo", менеджеры: {date: "10/10/2016"}}} – Dhanabal

+0

вы можете легко разрешить – Dhanabal

2

Вы всегда можете добавить геттер и сеттер модели клиента и установить вручную поля менеджера. Опять же, это зависит от отношений с менеджером, если он уже существует и т. Д., Но главное - вы можете создавать методы, которые затем могут быть доступны в форме в качестве методов клиента.

# in customer.rb 

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

def manager_date 
    manager.date 
end 

затем в виде

<%= f.input :manager_date %> 

Примечание - это краткий пример, вам нужно сохранить менеджер где-то и делать это до или после того, как клиент обновляется будет зависеть от ваших потребностей ,

Другой способ сделать это, чтобы создать attr_accessor для manager_date в клиента, и если она есть, обновить менеджер после того, как клиент будет сохранен

after_save :update_manager 

def update_manager 
    manager.date = manager_date 
    manager.save 
end 
+0

Можно ли использовать скрытый атрибут в Customer и передать его менеджеру? – InQusitive

+0

Да - мы делаем это все время. Он не работает с has_many, но он отлично подходит для has_one или принадлежит_to. – Swards

+0

у него has_may, я отвечу с вашим ответом. – InQusitive