こんにちは私はフォームオブジェクトのリファクタリングパターンを使用しています。 ProjectとUserという2つのモデルがあります。そのようなRailsは別の名前で委譲します
Project.first.name # "Buy milk"
User.first.name # "John Doe"
私は、プロジェクトの名前とユーザーの名前を受け入れるフォームを持っています。
class UserForm
include ActiveModel::Model
def initialize(name:'', project_name:'')
@name = name
@project_name = project_name
end
def persisted?
false
end
def self.model_name
ActiveModel::Name.new(self, nil, "ProjectForm")
end
delegate :name, :email, to: :user
delegate :project_name, to: :project # PROBLEM: project has #name not #project_name method
def user
@user ||= User.new
end
def project
@project ||= Project.new
end
end
プロジェクトとユーザーの両方がフィールド名を持っているので、主な問題は、初期化とコードのデリゲート一部である、と私は初期化の両方のための@nameを持つことはできません。
delegate name: :project_name?
ありがとうございました!今http://apidock.com/rails/Module/delegate
、あなたがこのような接頭辞のメソッドを呼び出すことができます:
UserForm.new.user_name
UserForm.new.project_name