我有两个相关的模型,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
在员工控制器中的位置(就在 之前)。但是怎么做?另外,这是最好的和“最常见的”方式吗?