Spesso e’ complicato a meno che, come al solito e come e’ sicuramente
probabile si tratti di impostazione sbagliata.
Modelli:
Customer
has_many :deliveries
has_one :document
Delivery
belongs_to :customer
belongs_to :operator
has_many :delivery_items
has_many :products, :through => :delivery_items
Document
belongs_to :customer
Product
has_many :delivery_items
has_many :deliveries, :through => :delivery_items
L’utente che utilizza l’applicazione deve:
fare una ricerca del Customer, una volta trovato deve poter
visualizzare i dettagli del customer e, tramite un form, associargli
un Delivery e un Document, contemporaneamente al Delivery deve essere
associati uno o piu’ Products.
Quello che ho pensato di fare e’ visualizzare il form nella view show
di Customer:
CustomersController
def show
@customer = Customer.find(params[:id])
@delivery = Delivery.new
@document = Document.new
@products = Product.all
end
show.html.erb
<%= Customer.human_attribute_name("full_name") %>: <%= @customer.full_name %>
. . . <%= render 'deliveries/form' %>il partial e’:
<%= simple_form_for([@customer, @delivery]) do |f| %>
<%= f.input :delivered_at, :as => :hidden, :input_html => {
:value => Date.today } %>
<% for product in @products %>
<%= check_box_tag ‘delivery[product_ids][]’, product.id,
@delivery.products.include?(product) %>
<%= product.description %>
<% end %>
<%= f.error :products%>
<%= simple_fields_for @document do |doc| %>
<%= doc.label :doc_type %>:
<%= doc.text_field :doc_type %>
<%= doc.error :doc_type %>
<%= doc.label :doc_number %>:
<%= doc.text_field :doc_number %>
<%= doc.error :doc_number %>
<%= doc.label :issued_by %>:
<%= doc.text_field :issued_by %>
<%= doc.error :issued_by %>
<% end %>
Nel routes.rb ho:
resources :customers do
resources :deliveries
end
Tutto funziona ma quello che non mi sfagiola e’ la creazione degli
oggetti @delivery e @document dentro l’action show che per definizione
dovrebbe essere usata per mostrare non per creare.
Non trovo pero’ altre soluzioni per far funzionare il form di cui sopra.