gpt4 book ai didi

ruby-on-rails - 具有不同名称的 Rails 委托(delegate)

转载 作者:数据小太阳 更新时间:2023-10-29 07:46:00 24 4
gpt4 key购买 nike

您好,我正在使用表单对象重构模式。我有两个模型,项目和用户。这样

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

主要问题在于代码的初始化和委托(delegate)部分,因为 Project 和 User 都有一个字段名称,所以我不能在初始化中为两者都使用 @name。有没有办法做类似的事情

delegate name: :project_name?

谢谢!

最佳答案

Delegate 允许您为委托(delegate)字段指定前缀。

delegate :name, to: :project, prefix: true

它将允许以 project_name 访问它。

或者可以为它指定你自己的前缀:

delegate :name, to: :project, prefix: :my_project

它将允许以 my_project_name 访问它。

http://apidock.com/rails/Module/delegate

关于ruby-on-rails - 具有不同名称的 Rails 委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38855774/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com