7 Patterns to Refactor Fat ActiveRecord Models - ecco un ottimo articolo sui diversi approcci di refactoring che utilizzano PORO. Sotto la 3a didascalia c'è un modello di Oggetto modulo, che mi è piaciuto molto e già implementato in uno dei progetti. Esiste solo un esempio che utilizza una risorsa nidificata, ma vorrei implementare questo modello per più risorse nidificate. Forse qualcuno qui aveva già affrontato questo? Non ho necessariamente bisogno di esempi di codice, solo l'idea di base andrebbe bene.Rails Form Objects con più risorse nidificate
Aggiornamento
Considerate questo esempio. Ho due modelli.
class Company
has_many :users
accepts_nested_attributes_for :users
end
class User
belongs_to :company
end
In caso di un utente nidificato per la società che utilizza modello Form Object avrei scritto quanto segue:
<%= form_for @company_form do |f| %>
<%= f.text_field :name %>
<%= f.text_field :user_name %>
<%= f.submit %>
<% end %>
oggetto form
class CompanyForm
include Virtus
extend ActiveModel::Naming
include ActiveModel::Conversion
include ActiveModel::Validations
attr_accessor :company, :user
def user
@user ||= company.users.build
end
def company
@company ||= Company.new
end
def submit(params={})
company.name = params[:name]
user.name = params[:user_name]
persist!
end
private
def persist!
company.save!
user.save!
end
end
Ma cosa succede se ho un modulo, in cui è possibile creare un'azienda con più utenti. L'approccio comune è quello di scrivere in questo modo, utilizzando nested_form:
<%= nested_form_for @company do |f| %>
<%= f.text_field :name %>
<%= fields_for :users, do |user_form| %>
<%= user.form.text_field :name %>
<% end %>
<%= f.link_to_add "Add a user", :users %>
<%= f.submit %>
<% end %>
Quello che mi chiedo è come faccio a implementare che del modello Form oggetto in questo caso?
Questa non è davvero una domanda, quindi sarà difficile rispondere. Puoi per favore postare del codice e fare una domanda più specifica? Grazie. – Powers
Ho pubblicato un aggiornamento. – tokenvolt
Questa è una bella domanda, che sto cercando di trovare maggiori informazioni su. Hai mai risolto questo problema con gli oggetti modulo? – jay