簡體   English   中英

Rails更新關聯模型的對象

[英]Rails update associated model's object

我的機會模型如下所示:

class Opportunity < ApplicationRecord

# opportunity belongs to a user
belongs_to :user

def self.create_opportunity(params)

  # Fetch opportunity params and user params from request parameters
  opportunity_params = params[:opportunity_params]
  user_params = params[:user_params]

  opportunity = Opportunity.find_or_initialize_by(id: opportunity_params[:id])
  opportunity.assign_attributes(opportunity_params)

  opportunity.user = User.find_or_initialize_by(email: user_params[:email])
  opportunity.user.assign_attributes(user_params)

  opportunity.save

end

user.rb模型

class User < ApplicationRecord

  # validate user email
  validates :email, presence: true, email: true
  enum gender: { male:1, female:2 }

end

如果提供電子郵件的用戶不存在,我們將創建一個新用戶。 在創建新用戶時,此方法效果很好,但在已有用戶的情況下,此方法不起作用。 用戶模型的更新不起作用。 為了使用戶能夠正常工作,我需要專門致電opportunity.user.save

知道如何在不顯式調用用戶模型上保存的情況下使此工作有效嗎?

使用此行,您可以創建一個不存在的新用戶並更新其數據。

opportunity.user.find_or_create_by(email: user_params[:email]).update(user_params)

如果用戶未更新,則此方法將返回true / false。 如果您希望用戶自己創建,請使用以下命令:

opportunity.user.find_or_create_by(email: user_params[:email]).tap{ |user| user.update(user_params) }

編輯:這必須工作:

opportunity.user = User.find_or_create_by(email: user_params[:email]).tap{ |user| user.update(user_params) }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM