我是stackoverflow的新手,所以如果格式不佳,我很抱歉。
在我目前的项目中,我有一个模型驱动程序,它有很多行程。这些旅行有许多里程,回程,选择,下降和小时。当我创建一个新的旅行时,我希望能够将它与驱动程序相关联,但我还希望能够在同一页面上添加里程数,回程,选择和删除时间。我不确定如何构建我的路线。我成功地为一个司机创造了一个旅行而没有添加额外的模型到旅行但是从那里我很难过。到目前为止,我只创建了里程模型/控制器,以满足与行程相关的需求。任何朝着正确方向的推动都会非常感激。
驱动程序模型
class Driver < ApplicationRecord
has_many :trips
end
旅行模式
class Trip < ApplicationRecord
belongs_to :driver
has_many :mileages
accepts_nested_attributes_for :mileages
default_scope {order(date: :asc)}
validates :total, presence: true
validates :date, presence: true
validates_uniqueness_of :trip_number, :allow_nil => true, :allow_blank =>
true
end
里程模型
class Mileage < ApplicationRecord
belongs_to :trip
end
Trips控制器
def index
@trips = Trip.all
end
def show
end
def new
@driver = Driver.find(params[:driver_id])
@trip = Trip.new
end
def edit
end
def create
@driver = Driver.find(params[:driver_id])
@trip = Trip.new(trip_params)
@driver.trips.create(trip_params)
respond_to do |format|
if @driver.trips.create(trip_params)
flash[:notice] = "Trip successfully created"
redirect_to new_driver_trip_path(@driver)
else
flash[:warning] = "Unable to create trip"
redirect_to new_driver_trip_path(@driver)
end
end
private
def set_trip
@trip = Trip.find(params[:id])
end
def trip_params
params.require(:trip).permit(:trip_number, :date, :driver_id, :total)
end
end
里程控制器
def new
@mileage = Mileage.new
end
def create
@mileage.create(mileage_params)
end
private
def mileage_params
params.require(:mileage).permit(:miles, :rate, :total)
end
end
end
驱动程序控制器
def index
@drivers = Driver.all
end
def show
end
def new
@driver = Driver.new
end
def edit
end
def create
@driver = Driver.new(driver_params)
respond_to do |format|
if @driver.save
format.html { redirect_to @driver, notice: 'Driver was
successfully created.' }
format.json { render :show, status: :created, location: @driver }
else
format.html { render :new }
format.json { render json: @driver.errors, status:
:unprocessable_entity }
end
end
end
private
def set_driver
@driver = Driver.find(params[:id])
end
def driver_params
params.require(:driver).permit(:first_name, :last_name, :email, :unit)
end
end
答案 0 :(得分:0)
如果要在同一页面上创建嵌套模型。即使用accepts_nested_attributes_for在旅行页面内的milages,您可以使用cocoon gem。
https://github.com/nathanvda/cocoon
Drifting Ruby有一个视频,详细显示了易于遵循的流程。 https://www.youtube.com/watch?v=56xjUOAAZY8
您也可以手动完成,但需要更多工作。 使用cocoon,您将拥有一个驱动程序控制器和Trip控制器,但您不需要Milage控制器,因为它是通过Trip Controller通过nested_attributes处理的。
如果你想手动完成,你需要一些JavaScript。您可以关注此主题的Ryan Bates RailsCast。 railscasts.com/episodes/196-nested-model-form-revised