2014-12-19 2 views
1

운동 추적기를 만들려고합니다.레일 4 중첩 된 리소스, 양식, 강력한 매개 변수

class Workout < ActiveRecord::Base 
    has_many :exercises 
    belongs_to :day 
end 

Day.rb에게

class Day < ActiveRecord::Base 
    has_many :workouts 
    has_many :meals 
    accepts_nested_attributes_for :workouts, :allow_destroy => true 
    accepts_nested_attributes_for :meals, :allow_destroy => true 
end 

문제를

Workout.rb : 나는

resources :days do 
    resources :workouts 
    resources :meals 
end 

내 모델은 잘 보면 이러한 중첩 된 자원

Routes.rb이 내가 창조하려고하면 거짓말한다. EA의 새로운 운동 ..

../views/workouts/_form.html.haml

= form_for([@day, @workout]), html: {class: 'form-horizontal'}) do |f| 
    = f.input :workout, label: "What did you work out", input_html: { class: "form-control"} 
    = f.input :mood, label: "How do you feel", input_html: { class: "form-control"} 
    = f.hidden_field :day_id, value: params[:day_id], input_html: { class: "form-control"} 

    = f.submit 

내가 저장하는 것 은어 : 운동은 운동과 관련된 day_id하는 강력한 PARAMS를 사용하여 그것들을받을 수 있지만 .

WorkoutsController.rb

private 

def workout_params 
    params.require(:workout).permit(:day_id, :name, :mood) 
end 

def find_day 
    @day = Day.find(params[:day_id]) 
end 

대신에 무엇을 저장 도착하기위한 무기 호입니다 : day_id

레일 콘솔 :

Workout id: 11, name: "Hey", mood: "no", day_id: nil, created_at: "2014-12-19 14:53:29", updated_at: "2014-12-19 14:53:29" 

HELP는?

추신 - 내가

= form_for([@day, @workout]), as: :foo, html: {class: 'form-horizontal'}) do |f| 
    = f.input :workout, label: "What did you work out", input_html: { class: "form-control"} 
    = f.input :mood, label: "How do you feel", input_html: { class: "form-control"} 
    = f.hidden_field :day_id, value: params[:day_id], input_html: { class: "form-control"} 

    = f.submit 

다음

def workout_params 
    params.require(:foo).permit(:day_id, :name, :mood) 
end 

을하려고 노력하지만 그냥 말을 계속 : 빈 푸 PARAMS을

+0

합니까 이 일? 'Day.find (params [: workout] [: day_id])' – Magnuss

+0

'레이크 루트 '를 실행하고 보고서를 게시 할 수 있습니까 (아니면 최소한 하루와 운동 경로가있는 부분)? – tagCincy

답변

0

당신의 경로가 설정되는 방식, I day_id이 URL로 전달된다고 가정 할 때 params :

/days/:day_id/workouts 
이런 경우 16,

, 당신은 형태에 대한 @day을 걱정할 필요가, 나 workout_params

형태로 day_id하지 않습니다

= form_for @workout, html: {class: 'form-horizontal'}) do |f| 
    = f.input :workout, label: "What did you work out", input_html: { class: "form-control"} 
    = f.input :mood, label: "How do you feel", input_html: { class: "form-control"} 

    = f.submit 

컨트롤러 :

def create 
    @workout = @day.workouts.new(workout_params) 
    .... 
end 

private 

def workout_params 
    params.require(:workout).permit(:name, :mood) 
end 

def find_day 
    @day = Day.find(params[:day_id]) 
end 
관련 문제