在表单提交上创建多个对象

时间:2014-11-20 14:14:42

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-4

在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文件行动?想看看有什么想法。

1 个答案:

答案 0 :(得分:0)

如果你想要的行为是&#34;每次我发送一个分享,我也想创建一个ShareLink&#34;,然后你就是对的。控制器不是最好的地方。 可能最好覆盖Share中的deliver方法,以便它可以插入新的ShareLink

def deliver
    super
    ShareLink.create(params:{...})
end

但是这假设您在Share对象中有足够的信息来创建ShareLink个。 这样,即使您在代码的其他部分(可能是自动化的)中创建并发送Share,您也不必管理此