7 Patterns to Refactor Fat ActiveRecord Models - 這裏是一篇關於使用PORO的不同重構方法的精彩文章。在第三個標題下有一個Form Object模式,我真的很喜歡它,並且已經在其中一個項目中實現了。只有一個使用嵌套資源的示例,但我想爲多個嵌套資源實現此模式。也許這裏有人已經處理了這個?我不一定需要任何代碼示例,只是基本的想法會很好。帶有多個嵌套資源的Rails窗體對象
更新
考慮這個例子。我有兩個模型。
class Company
has_many :users
accepts_nested_attributes_for :users
end
class User
belongs_to :company
end
在爲公司一個嵌套的用戶的情況下,使用表單對象模式我會寫:
<%= form_for @company_form do |f| %>
<%= f.text_field :name %>
<%= f.text_field :user_name %>
<%= f.submit %>
<% end %>
表單對象
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
但是,如果我有一個表格,其中可以創建一個擁有多個用戶的公司。通常的做法是把它寫這樣的,使用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 %>
我所問的是如何實現在這種情況下,形式對象模式?
這不是一個真正的問題,所以它很難回答。你可以請張貼一些代碼並問一個更具體的問題嗎?謝謝。 – Powers
我發佈了一個更新。 – tokenvolt
這是一個很好的問題,我試圖找到更多信息。你有沒有用表單對象解決這個問題? – jay