2017-12-08 8 views
0

나는 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 

트립 제어기

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

같은 페이지에 중첩 된 모델을 만들려면. accepts_nested_attributes_for를 사용하여 여행 페이지 내의 마일 수를 계산합니다. 누에 고치 보석을 사용할 수 있습니다.

https://github.com/nathanvda/cocoon

표류 루비 따라 용이 세부 과정을 보여주는 비디오를 갖는다. https://www.youtube.com/watch?v=56xjUOAAZY8

수동으로 설정할 수도 있지만 좀 더 많은 작업이 필요합니다. 누에 고치를 사용하면 드라이버 컨트롤러 및 Trip 컨트롤러가 있지만 Trip Controller를 통해 nested_attributes로 처리되므로 Milage 컨트롤러가 필요하지 않습니다.

수동으로 처리하려면 자바 스크립트가 약간 필요합니다. 이 주제에 대해 Ryan Bates RailsCast를 따를 수 있습니다. railscasts.com/episodes/196-nested-model-form-revised

+1

감사합니다. 나는 그 보석에 총을 줄 것입니다. 매우 감사! –

+0

도움이된다면 답을 승인하면 감사하겠습니다. –