그냥 이 통해 여러 가지고 또는 가지고 많은 누락 된 ID에 속하는
모델 "운동 ID가 존재해야합니다"무게
을 내가하려고하면이 오류를 받고 있어요 여기에 간단한 운동 로그를 생성하고 만들려고class Workout < ApplicationRecord
belongs_to :user
has_many :exercises
has_many :weights, through: :exercises
accepts_nested_attributes_for :exercises, :allow_destroy => true
accepts_nested_attributes_for :weights, :allow_destroy => true
validates :bodypart, presence: true, length: { maximum: 255 }
end
class Weight < ApplicationRecord
belongs_to :exercise
belongs_to :workout
validates :amount, presence: true, length: { maximum: 255 }
validates :reps, presence: true, length: { maximum: 255 }
end
class Exercise < ApplicationRecord
belongs_to :workout
has_many :weights
accepts_nested_attributes_for :weights
validates :name, presence: true
validates_associated :weights
end
몇 가지 내용을 읽은 후에 나는 많은 연관성을 가지고 이러한 연관성에 대한 옵션이 될 것이라고 생각했지만 지금은 확실하지 않습니다. 운동을 위해 체중을 만들려고 할 때 나는 운동 ID를 얻지 만 여러 시도에도 불구하고 운동 ID를 얻지 못하는 것 같습니다. 나는 컨트롤러의 단순한 문제인지, 아니면 여기에 더 큰 무언가를 놓친다면 확실하지 않다.
내 현재 무게 컨트롤러
class WeightsController < ApplicationController
before_action :authenticate_user!
def new
@weight = Weight.new
end
def create
@exercise = Exercise.find(params[:exercise_id])
@weight = @exercise.weights.build(weight_params)
if @weight.save
flash[:notice] = "Set saved"
redirect_to exercise_path(@exercise)
else
redirect_to exercise_path(@exercise)
flash[:notice] = "#{@weight.errors.full_messages.to_sentence}"
end
end
def edit
end
def update
end
def destroy
weight = Weight.find(params[:id])
@weight.destroy
redirect_to root_path
end
private
def weight_params
params.require(:weight).permit(:amount, :reps)
end
end
Routes.rb
Rails.application.routes.draw do
devise_for :users, controllers: { omniauth_callbacks: "callbacks" }
root 'articles#index'
get '/demo', to: 'static_pages#demo'
get '/about', to: 'static_pages#about'
get '/test', to: 'static_pages#index'
resources :articles
resources :workouts do
resources :exercises
end
resources :exercises do
resources :weights
end
resources :workouts do
member do
put :is_finished
put :unfinish
end
end
resources :exercises do
member do
put :is_finished
put :unfinish
end
end
resources :books, :only => :index
end
연습 컨트롤러 난 항상 내 무게 모델하지만 설정 workout_id에 대한 ID 열이 할
class ExercisesController < ApplicationController
before_action :authenticate_user!
# before_action :set_exercise, except: [:index, :new, :create]
def new
@exercise = Exercise.new
@exercise.weights.new
end
def index
@workout = Workout.find(params[:workout_id])
@exercise = @workout.exercises
end
def create
@workout = Workout.find(params[:workout_id])
@exercise = @workout.exercises.build(exercise_params)
if @exercise.save
redirect_to workout_exercise_path(@workout, @exercise)
flash[:notice] = "Exercise created, enter weight and reps for your first set"
else
redirect_to @workout
flash[:notice] = "#{@exercise.errors.full_messages.to_sentence}"
end
end
def edit
end
def update
@exercise = Exercise.find(params[:id])
if @exercise.update_attributes(exercise_params)
redirect_to exercise_path(@exercise)
else
flash[:notice] = "Something went wrong"
end
end
def show
@exercise = Exercise.find(params[:id])
@weights = @exercise.weights.order('created_at DESC').paginate(page: params[:page], per_page: 5)
end
운동을 할 때마다 NULL을 채 웁니다. 또한 레일 콘솔에서 운동을 찾고 @workout.weights를 호출하면 운동과 관련된 가중치가 올바르게 반환됩니다. 무게 모델에서 운동 ID를 채울 수 없습니다. 많은 사람들이 가지고 있고 소유하고 있는지 궁금해하는 것이 더 좋을 것입니다. 그렇지 않으면 많은 것이 단지 잘못 설정된 것입니다. 나는 행운없이 "inverse_of"를 시도했다. 어떤 도움을 주시면 감사하겠습니다.