2013-07-28 44 views
0

在我的第一個應用程序上工作,有點卡住了。我正在修改嵌套屬性的railscast,但我的表單不顯示字段。以下是我的。日期和提交字段都顯示,但我試圖做的動作(然後我需要一個代表和重量),根本沒有出現。就好像它在渲染時不存在一樣。在rails中查看嵌套屬性窗口的問題

/views/workouts/_workout_form.html.erb寫着:

<%= form_for(@workout) do |f| %> 
    <%= render 'common/form_errors', object: @workout %> 

    <p> 
     <%= date_select :workout, :workout_date %><br /> 

     <%= f.fields_for :exercises do |builder| %> 
     <fieldset> 
      <%= builder.label :movement, "Movement" %><br /> 
      <%= builder.text_area :movement %> 
     </fieldset> 
     <% end %> 

    </p> 

    <p> 
     <%= f.submit "Log It" %> 
    </p> 


<% end %> 

/views/workouts/index.html.erb寫着:

<%= provide(:title, 'GymLog') %> 

<div id='ask'> 
<h1>Post a Workout</h1> 
<% if logged_in? %> 
<%= render 'workout_form' %> 
<% else %> 
<p>Please login</p> 
<% end %> 
</div> 

/模型/ exercise.rb reads:

class Exercise < ActiveRecord::Base 
    belongs_to :workout 
    attr_accessible :movement, :reps, :weight 
end 

/models/workout.rb讀取:

class Workout < ActiveRecord::Base 
    belongs_to :user 
    has_many :exercises 
    attr_accessible :workout_date, :exercises_attributes 
    accepts_nested_attributes_for :exercises 
end 

/controllers/workout_controller.rb讀取:

class WorkoutsController < ApplicationController 
    before_filter :auth, only: [:create] 

    def index 
    @workout = Workout.new 
    end 

    def address_attributes=(attributes) 
    end 

    def create 
    @workout = current_user.workouts.build(params[:workout]) 
    if @workout.save 
     flash[:success] = 'Workout Recorded' 
     redirect_to root_url 
    else 
     render 'index' 
    end 
    end 
end 

/controllers/exercises_controller.rb讀取:

class ExercisesController < ApplicationController 
    def new 
    end 
end 
+0

您是否在控制器操作中爲您的@workout對象構建練習? –

+0

@NickKugaevsky railscast並沒有真的超過控制器,所以可能不會。編輯帖子以包含控制器 – Ryan

回答

0

您應該在控制器操作中爲新初始化的對象構建嵌套對象。試試看:

# controllers/workouts_controller.rb 

class WorkoutsController < ApplicationController 
    # ... 

    def index 
    @workout = Workout.new 
    @workout.exercises.build 
    end 

    # ... 
end 
+0

謝謝!那樣做了。 – Ryan