我想在rails上的ruby中更新用户列

时间:2016-02-15 00:07:35

标签: ruby-on-rails ruby

我想使用出价表

中的用户ID更新作业表内的列工作者

这是我的控制器

def worker
@bid = Bid.find(params[:id])
@job = Job.find(params[:id])
  @job.update_attributes(worker: @bid.user.id)
  redirect_to projects_path
end

和我创建了一个put" worker"在路线

这是我尝试使用

的链接
<%= link_to 'Assign To Project', worker_path(bid), method: :put%>

每个循环中都有出价和工作 Logic正在使用rails控制台,但我认为错误是如何获取作业ID和出价ID,它只运行一次,但只更新第一份作业

3 个答案:

答案 0 :(得分:2)

如果您想传递多个参数,请使用button_to代替link_to

  

生成一个包含提交到URL的单个按钮的表单   由选项集创建。

<%= button_to 'Assign To Project', 
              worker_path(bid), 
              method: :put, 
              params: { bid_id: some_variable } 
%>

答案 1 :(得分:0)

#config/routes.rb
resources :jobs do
  put ":bid_id/worker", action: :worker #-> url.com/jobs/:job_id/:bid_id/worker
end

#app/controllers/jobs_controller.rb
class JobsController < ApplicationController
  def worker
    @job = Job.find params[:job_id]
    @bid = Bid.find params[:bid_id]
    redirect_to projects_path if @bid.update worker: @job.user 
  end
end

以上您将能够调用以下内容:

<%= link_to "Update Worker", jobs_worker_path(job, bid), method: :put %>

您正在做的事情真正应由ActiveRecord Associations处理。

例如,我希望您的foreign_key表中有jobs worker_id个;因此,如果您致电update_attributes worker: @job.user.id,则为antipattern

上面的代码应该对你有用,但它仍然是hacky。

答案 2 :(得分:0)

最后它正在工作,抱歉让我感到困惑,这是我第一次在这里提出问题,

控制器

  def worker
    @job = Job.find params[:job_id]
    @bid = Bid.find params[:bid_id]
    if @job.worker.nil?
      redirect_to projects_path if @job.update_attributes worker: @bid.user.id
    else
      redirect_to projects_path , notice: "#{@bid.user.name} assigned on this project"
    end
  end

链接

<%= button_to 'Assign To Project',
 job_worker_path(job, bid),
 method: :put,
 params: { bid_id: bid.id }%>

路线

  resources :jobs  do
    match 'worker', to: 'jobs#worker', via:[:put]
    resources :bids
  end

我试图将bid.user.id分配给job.worker