【发布时间】:2013-04-08 19:53:07
【问题描述】:
我有两个关联模型,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 之前)。但是怎么做?另外,这是最好的和“最常见的”方式吗?
【问题讨论】:
标签: ruby-on-rails redirect controller action back