【问题标题】:Creating a record from a different model view(no new action involved)从不同的模型视图创建记录(不涉及新操作)
【发布时间】:2015-05-08 06:48:28
【问题描述】:

我在公司和员工之间有一个 has_many 和 belongs_to 关联。我希望能够通过我的工人索引页面中的链接将工人添加到公司。我希望保存属于已登录公司的员工记录,并使用添加到其员工的新员工更新公司/员工索引页面。

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

我的路线是这样的:

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

  resources :workers

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

应用控制器:

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

和公司::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 实例变量。

我有一个属于_一家公司的模范工人和一个拥有_许多工人的模范公司,并且我已经在我的迁移中添加了引用键。

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

【问题讨论】:

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


    【解决方案1】:

    乍一看,我发现您可能有两个错误:

    1. 您的 Company 模型类 has_many 工人,因此将工人分配(或添加)到公司,我相信它必须是这样的:

      @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)
      

    希望这会有所帮助!

    【讨论】:

    • 这并没有解决问题,现在 url 以 company/workers.id 结束但仍然没有将工人保存到公司
    • 你能放一些你的模型的代码吗?所以我可以更好地看到你的实现。
    猜你喜欢
    • 2020-07-08
    • 1970-01-01
    • 2019-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多