2014-01-06 86 views
0

我是一个litte卡住不幸,也许有人可以帮忙吗?谢谢!Rails - STI - 嵌套的资源 - belongs_to coulmn

我有3类用户,经理和驱动程序。经理和驱动程序是 用户的子类。司机与经理belongs_to的关系:我用STI

class User < ActiveRecord::Base 
    attr_accessible :email, :name 
end 

class Manager < User 
has_many :drivers 
end 

class Driver < User 
belongs_to :manager 
end 

:加入

ActiveRecord::Schema.define(:version => 20140104122558) do 

    create_table "users", :force => true do |t| 
    t.string "name" 
    t.string "email" 
    t.datetime "created_at", :null => false 
    t.datetime "updated_at", :null => false 
    t.string "type" 
    t.integer "manager_id" 
    end 

    add_index "users", ["manager_id"], :name => "index_users_on_manager_id" 

end 

经理标识来店经理,当此列中的经理-id,创建一个新的驱动程序参考应该存储哪个唉不起作用。 “manager_id”列保持空白。也许有人知道如何自动保存关联?

路线:

resources :managers do 
    resources :drivers 
    end 

class ManagersController < ApplicationController 

    def index 
    @managers = Manager.all 
    end 

    def show 
    @manager = Manager.find(params[:id]) 
    end 

    def new 
    @manager = Manager.new 
    end 

    def edit 
    @manager = Manager.find(params[:id]) 
    end 

    def create 
    @manager = Manager.new(params[:manager]) 
if @manager.save 
    # Handle a successful save. 
    render 'new' 
else 
    render 'new' 
end 
    end 

    def update 
    @manager = Manager.find(params[:id]) 
    end 

    def destroy 
    @manager = Manager.find(params[:id]) 
    @manager.destroy 
    end 

end 



class DriversController < ApplicationController 

    def index 
    @drivers = Driver.all 
    end 

    def show 
    @driver = Driver.find(params[:id]) 
    end 

    def new 
    @driver  = Driver.new 
@manager = Manager.find_by_id(params[:manager_id]) 
    end 

    def edit 
    @driver = Driver.find(params[:id]) 
    end 

    def create 
    @driver = Driver.new(params[:driver]) 
@manager = Manager.find_by_id(params[:manager_id]) 
if @driver.save 
    # Handle a successful save. 
    render 'new' 
else 
    render 'new' 
end 
    end 

    def update 
    @driver = Driver.find(params[:id]) 
    end 

    def destroy 
    @driver = Driver.find(params[:id]) 
    @driver.destroy 
    end 

end 

在创建行动不应则params的[ID]代替PARAMS [MANAGER_ID]可以用吗?

<h1>New driver</h1> 

<%= form_for [@manager,@driver] do |f| %> 
    <%= f.label :name %> 
<%= f.text_field :name %><br /> 
<%= f.label :email %> 
<%= f.text_field :email %><br /> 
<%= f.submit "Create new driver" %> 
<% end %> 

回答

0

有一个要点它展示了如何解决这个问题: Solution on github

控制器:

class ManagersController < ApplicationController 

    def index 
    @managers = Manager.all 
    end 

    def new 
    @manager = Manager.new 
    end 

    def create 
    @manager = Manager.new(params[:manager]) 
    if @manager.save 
     redirect_to @manager 
    else 
     render 'new' 
    end 
    end 

    def show 
    @manager = Manager.find(params[:id]) 
    end 

end 


class DriversController < ApplicationController 

    def index 
    @manager = Manager.find(params[:manager_id]) 
    @drivers = @manager.drivers.all 
    end 

def new 
    @manager = Manager.find(params[:manager_id]) 
    @driver = @manager.drivers.new 
end 

def create 
    @manager = Manager.find(params[:manager_id]) 
    @driver = @manager.drivers.new(params[:driver]) 
    if @driver.save 
     redirect_to [@manager, @driver] 
    else 
     render 'new' 
    end 
end 

def show 
    @manager = Manager.find(params[:manager_id]) 
    @driver = @manager.drivers.find(params[:id]) 
end 

end