从不同的模型视图创建记录(不涉及新的操作)

时间:2015-05-08 06:48:29

标签: ruby-on-rails ruby ruby-on-rails-4 activerecord model-view-controller

我有一个has_many& belongs_to公司和工人之间的关联。我希望能够通过我的工作人员索引页面中的链接向公司添加工作人员。我想要保存属于登录公司的工作记录,并更新公司/工人索引页面,并将新工作人员添加到他们的工作人员。

我一直无法做到这一点。以下是发生的事情:

我的路线有类似的东西:

  namespace :company do
    resources :workers, :only => [:index, :create]
  end

  resources :workers

我有一个before_action方法,它在我的控制器中与公司访问令牌进行cookie会话:

的ApplicationController:

@company = Company.find_by_access_token("vZAni6K6")
cookies[:access_token] = @company.access_token

And Company :: WorkersController

render :file => "public/401.html", :layout => nil, :status => :unauthorized and return if cookies[:access_token] != @company.access_token

在我的workers / index.html.haml路径中,我有:

= "There are #{@workers.count} workers!"

They are:
- @workers.each do |worker|
  = worker.name
  = link_to "Hire a worker", company_workers_path(:worker_id => worker), :method => :post
%%br

%p= @company.name

我希望能够点击"雇佣工人链接"然后被重定向到company / workers.html.haml路径,然后列出他们的工作人员,最近添加了刚刚通过链接添加的工作人员。

当我点击链接时(比如数据库中的工人#2),而不是带我到公司/工人路径,它带我去

company/workers?worker_id=2

并且它不会将工作人员保存到与公司的关联中。

我的公司/工人控制员有以下几点:

  def create
    @worker = @company.worker.build(:worker_id => params[:worker_id])
    @worker.save
    redirect_to :action => 'index'
  end

请记住,我的控制器上有一个before_action,它在调用其他控制器方法之前保存@company实例变量。

我有一个属于公司的模范工人&一个模型公司,有很多工人,我已经在我的迁移中添加了参考密钥。

有什么问题?为什么奇怪的路线和为什么我的记录没有保存,我有点新手,所以原谅这个简单的问题。

1 个答案:

答案 0 :(得分:0)

初看起来,我发现你可能有两个错误:

  1. 您的公司模型类has_many worker,所以要将一个worker分配(或添加)给一个公司,我相信它必须是这样的:

    @worker = Worker.find(params[:worker_id])
    @worker.company = @company
    @worker.save!
    # depending in your schema, it could be something like this as well:
    # @company.workers << @worker
    
  2. 重定向到公司/工作人员,当您使用嵌套路由时,它必须像

    redirect_to company_workers_path(@company)
    
  3. 希望这有帮助!