1

我有两个相关的模型,Employee并且Company

class Employee < ActiveRecord::Base
  attr_accessible :name

  belongs_to :company
  attr_accessible :company_id
end

class Company < ActiveRecord::Base
  attr_accessible :name, :industry, :owner

  has_many :employees
end

我想要实现的是,当用户在新员工表单中键入不存在的公司名称时,他/她应该被重定向到新公司表单,名称字段已经填充了以前的值表格,填写要创建的公司,然后重定向到“员工成功创建”页面(但当且仅当公司首先创建时)。

我设法在创建员工的同时创建了一家公司,代码如下:

def create
  @employee = Employee.new(params[:employee])

  @company = Customer.find_or_create_by_name(params[:company][:name])
  @company.employees << @employee
  @company.save

  @employee.save
end

但是,这并没有让我选择填写公司信息的其余部分。

尝试使用redirect_to,我还设法将用户发送到编辑公司表单。

# one way to tell if the company has all its attributes filled
if @company.industry.blank?
  redirect_to edit_company_path(@company), notice: "Please edit the company details" and return
end

*该and return语句是必要的,否则我会收到“多次调用redirect_to”错误*

然而,这不是我们想要的行为——有两个原因:

  • 即使公司没有创建员工。
  • 不会通知用户有关员工创建的信息。

所以,我的想法是,我正在以正确的方式重定向到公司控制器和创建操作,并且我应该以某种方式重定向回我@employee.save在员工控制器中的位置(就在 之前)。但是怎么做?另外,这是最好的和“最常见的”方式吗?

4

1 回答 1

1

我看到的一种选择是将员工数据保存在会话 ( session[:temp_employee] = params[:employee]) 中,然后重定向到创建公司。在公司控制器中,保存公司后,您可以检查会话中是否存在员工,然后将客户端重定向回以创建员工控制器的操作。

这还需要您:

  • 启用通过路径创建操作的访问权限(例如get 'create', to: 'employees#create':)
  • 如果存在,则在员工中为会话变量中的属性创建操作,否则回退到参数哈希。
于 2013-04-08T22:13:45.540 回答