7 Patterns to Refactor Fat ActiveRecord Models - đây là một bài viết tuyệt vời về các phương pháp tái cấu trúc khác nhau bằng PORO. Theo chú thích thứ ba có một mẫu đối tượng Form, mà tôi thực sự thích và đã được thực hiện trong một trong các dự án. Chỉ có một ví dụ sử dụng một tài nguyên lồng nhau, nhưng tôi muốn thực hiện mẫu này cho nhiều tài nguyên lồng nhau. Có lẽ ai đó ở đây đã xử lý chuyện này chưa? Tôi không nhất thiết cần bất kỳ ví dụ mã nào, chỉ là ý tưởng cơ bản sẽ ổn thôi.Rails Form Objects với nhiều tài nguyên lồng nhau
Cập nhật
Hãy xem xét ví dụ này. Tôi có hai mô hình.
class Company
has_many :users
accepts_nested_attributes_for :users
end
class User
belongs_to :company
end
Trong trường hợp của một người sử dụng lồng nhau cho công ty sử dụng mẫu Form Object tôi sẽ viết như sau:
<%= form_for @company_form do |f| %>
<%= f.text_field :name %>
<%= f.text_field :user_name %>
<%= f.submit %>
<% end %>
Đối tượng biểu mẫu
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
Nhưng nếu tôi có một hình thức, nơi một công ty có nhiều người dùng có thể được tạo. Cách tiếp cận thông thường là để viết nó như thế này, sử dụng 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 %>
Những gì tôi đang hỏi là làm thế nào để thực hiện điều đó mẫu Form Object trong trường hợp này?
Đây không thực sự là một câu hỏi, do đó sẽ khó trả lời. Bạn có thể xin vui lòng gửi một số mã và hỏi một câu hỏi cụ thể hơn? Cảm ơn. – Powers
Tôi đã đăng một bản cập nhật. – tokenvolt
Đây là một câu hỏi hay, tôi đang cố tìm thêm thông tin. Bạn đã bao giờ giải quyết vấn đề này với các đối tượng biểu mẫu chưa? – jay