2013-04-08 71 views
1

我有两个关联模型,EmployeeCompany如何从控制器A的一个动作重定向到控制器B的动作并返回到Rails?

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)其中。但是如何?此外,这是最好的和“最轨道”的方式来做到这一点?

+0

检出路由http://guides.rubyonrails.org/routing.html – fneron 2013-04-08 20:05:35

回答

1

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

这还需要你:

  • 允许访问通过路径创建操作(如:get 'create', to: 'employees#create'
  • 在员工创造行动采取从会话变量属性,如果它存在,否则回退到params散列。
相关问题