加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Rails委托使用不同的名称

发布时间:2020-12-17 01:36:30 所属栏目:百科 来源:网络整理
导读:您好我在使用Form Object重构模式. 我有两个模型,Project和User.这样的 Project.first.name # "Buy milk"User.first.name # "John Doe" 我有一个表单接受项目的名称和用户的名称. class UserForm include ActiveModel::Model def initialize(name:'',project
您好我在使用Form Object重构模式.
我有两个模型,Project和User.这样的

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

主要问题在于代码的初始化和委托部分,因为Project和User都有一个字段名,因此我在初始化时不能同时使用@name.有没有办法做类似的事情

delegate name: :project_name?

谢谢!

解决方法

你可以使用前缀

class UserForm
  include ActiveModel::Model

   def initialize(name:'',to: :user,prefix: true
  delegate :name,to: :project,prefix: true

  def user
    @user ||= User.new
  end

  def project
    @project ||= Project.new
  end

end

更多信息:http://apidock.com/rails/Module/delegate

现在,您可以调用这样的前缀方法:

UserForm.new.user_name
UserForm.new.project_name

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读