在Rails中在表单提交上创建多个对象的好方法是什么?目前我有一封邮件'分享'对象,当它成功发送出去时,我想用相同的信息创建一个新的ShareLink对象,它通过参数传递:
class SharesController < ApplicationController
def create
@share = Share.new(params[:share])
@share.request = request
respond_to do |format|
format.js do
@share.deliver
end
end
end
这是我的邮件对象:
class Share < MailForm::Base
attribute :name, :validate => true
attribute :email, :validate => /\A([\w\.%\+\-]+)@([\w\-]+\.)+([\w]{2,})\z/i
attribute :url
attribute :message
def headers
{
:subject => "Resource share",
:to => "#{email}",
:from => %("John" <1234@gmail.com>)
}
end
end
我认为传递类似的东西不是一个好主意:
@share_link = ShareLink.create(params:{...})
在@share.delver
之后,或通过JS.erb文件行动?想看看有什么想法。
答案 0 :(得分:0)
如果你想要的行为是&#34;每次我发送一个分享,我也想创建一个ShareLink&#34;,然后你就是对的。控制器不是最好的地方。
可能最好覆盖Share中的deliver
方法,以便它可以插入新的ShareLink
def deliver
super
ShareLink.create(params:{...})
end
但是这假设您在Share
对象中有足够的信息来创建ShareLink
个。
这样,即使您在代码的其他部分(可能是自动化的)中创建并发送Share
,您也不必管理此