Rails - 创建用户,然后从另一个模型中查找下一个可用记录

时间:2015-04-05 21:44:36

标签: ruby-on-rails

我的/领导/新动作正常。由于该人正在报名参加比赛,我需要从我的Ticket模型(我从CSV导入)中获取下一个可用的票号,该票号具有lead_id的外键。

我还需要在@ lead.save = true之后将lead_id添加到Ticket.lead_id列。有人可以提供指导吗?我是一个新手,看完有关嵌套资源的视频后,我更加困惑。

 def create
    @lead = Lead.new(lead_params)
    if @lead.save
      redirect_to @lead 
    else
      render "new"
    end
  end

我的模型列下面列出了相关模型。

Ticket.column_names 
 => ["id", "code", "created_at", "updated_at", "lead_id"] 


Lead.column_names  
 => ["id", "name", "email", "created_at", "updated_at"]

谢谢!

更新 - Lead.rb

class Lead < ActiveRecord::Base
    has_many :tickets

    after_create :assign_ticket

def assign_ticket
  Lead.tickets << Ticket.where(lead_id: nil).first
end

end

现在问题出现在我创建新的潜在客户时:

NoMethodError in LeadsController#create

Extracted source 


def assign_ticket
  Lead.tickets << Ticket.where(lead_id: nil).first  #this is the error line
end

更新#2 - 现在有效

class Lead < ActiveRecord::Base
    has_many :tickets

    after_create :assign_ticket

    def assign_ticket
      self.tickets << Ticket.where(lead_id: nil).first
    end

end

当我创建Lead时,它确实为它分配了第一个未获得的票。现在,在Lead创建操作之后,我该如何打印票证?

1 个答案:

答案 0 :(得分:1)

如果您在以下模型中定义关联:

<强> Ticket.rb

belongs_to :lead

<强> Lead.rb

has_many :tickets

然后在模型 Lead.rb 中写道:

after_create :assign_ticket

def assign_ticket
  self.tickets << Ticket.where(lead: nil).first
end