7 Patterns to Refactor Fat ActiveRecord Models - 여기에는 PORO를 사용하는 다양한 리팩터링 접근법에 대한 훌륭한 기사가 있습니다. 3 번째 캡션에는 Form Object Pattern이 있는데, 저는이 프로젝트 중 하나에서 실제로 좋아하고 이미 구현했습니다. 하나의 중첩 된 리소스를 사용하는 예제가 있지만 여러 중첩 된 리소스에 대해이 패턴을 구현하고 싶습니다. 어쩌면 여기 누군가가 이미이 문제를 다루었을 것입니까? 필자는 코드 예제가 반드시 필요한 것은 아니며 기본적인 아이디어만으로도 충분합니다.여러 중첩 된 리소스가있는 레일스 양식 객체
업데이트하는 것은
이 예를 생각해 보자. 두 가지 모델이 있습니다. 회사에 대한 하나의 중첩 된 사용자의 경우
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 %>
내가 어떻게이 경우 그 양식 개체 패턴을 구현합니까 물어 보는 거지? 당신이 CompanyForm이 방법을 추가하는 경우 #{association_name}_attributes=
때문에, : :
def users_attributes=(users_attributes)
# manipulate attributes as desired...
@company.users_attributes= users_attributes
end
def users
company.users
end
fields_for
발전기가 CompanyForm에 대한 중첩 된 사용자 필드를 생성이 형식의 방법
이것은 실제로 질문이 아니므로 대답하기 어려울 것입니다. 몇 가지 코드를 게시하고보다 구체적인 질문을 해주십시오. 감사. – Powers
업데이트를 게시했습니다. – tokenvolt
이것은 좋은 질문입니다. 제가 더 많은 정보를 찾으려고합니다. 양식 객체로이 문제를 해결해 봤습니까? – jay