1

私の MechanicsController では create アクションが機能しますが、データベースを確認すると、タクシーが driver_id を取得していないことに気付きました。どこが間違っているのかわかりません。

助けていただければ幸いです...

class Driver < ActiveRecord::Base
  has_many :taxis
  has_many :mechanics, :through => :taxis
end


class Mechanic < ActiveRecord::Base
  has_many :driver, :through => :taxis
  has_many :taxis
end


class Taxi < ActiveRecord::Base
  belongs_to    :driver
  belongs_to :mechanic
end

class MechanicsController < ApplicationController
  def create

    this_driver=Driver.find(params[:driver_id])
    @mechanic = this_driver.mechanics.new(params[:mechanic])
    @taxi=@mechanic.taxis.new(params[:queueprocessor])

    respond_to do |format|
      if @mechanic.save
        format.html { redirect_to @mechanic, notice: 'Mechanic was successfully created.' }
        format.json { render json: @mechanic, status: :created, location: @mechanic }
      else
        format.html { render action: "new" }
        format.json { render json: @mechanic.errors, status: :unprocessable_entity }
      end
    end
  end
end

そして、ここに私の移行があります:

class CreateDrivers < ActiveRecord::Migration
  def change
    create_table :drivers do |t|
      t.timestamps
    end
  end
end


class CreateMechanics < ActiveRecord::Migration
  def change
    create_table :mechanics do |t|
      t.timestamps
    end
  end
end

class Taxis < ActiveRecord::Migration
  def change
    create_table :taxis do |t|
      t.belongs_to :driver
      t.belongs_to :mechanic
      t.timestamps
    end
  end
end

ありがとうございました

4

2 に答える 2

3

ここにはいくつか問題があります。これを変える:

class Mechanic < ActiveRecord::Base
  has_many :driver, :through => :taxis
  has_many :taxis
end

:driverこれに (が に変更されていることに注意してください:drivers):

class Mechanic < ActiveRecord::Base
  has_many :taxis
  has_many :drivers, :through => :taxis
end

さらに、createアクションでは、モデルを間違った順序でアタッチしています。

this_driver=Driver.find(params[:driver_id])
# this_driver.mechanics can't create a new association without a Taxi join model
@mechanic = this_driver.mechanics.new(params[:mechanic])   
@taxi=@mechanic.taxis.new(params[:queueprocessor])

次のように変更する必要があります。

this_driver=Driver.find(params[:driver_id])
@taxi = this_driver.taxis.build(params[:queueprocessor])
@mechanic = @taxi.build_mechanic(params[:mechanic])
于 2013-05-23T14:51:07.040 に答える
0

変化する:

has_many :driver, :through => :taxis

に:

has_many :drivers, :through => :taxis
于 2013-05-23T14:27:18.680 に答える