저는 세 모델이 있습니다 : Event
, Workout
및 Round
입니다.양식을 이중 중첩 양식으로 저장하려면 어떻게합니까?
개인은 운동을 포함하는 이벤트를 만들고 라운드를 통해 세트 및 가중치 수를 구성 할 수 있습니다.
현재 중첩 된 양식을 만들기 위해 cocoon
보석을 사용하고 있습니다. 양식을 사용하고 이벤트 및 운동을 저장할 수 있지만 라운드가 저장되지 않습니다.
class Event < ActiveRecord::Base
has_many :workouts, dependent: :destroy
has_many :rounds, :through => :workouts
belongs_to :user
accepts_nested_attributes_for :workouts, :allow_destroy => true
end
class Workout < ActiveRecord::Base
belongs_to :event
has_many :rounds, dependent: :destroy
accepts_nested_attributes_for :rounds, :allow_destroy => true
end
class Round < ActiveRecord::Base
belongs_to :workout
belongs_to :event
end
현재 내 경로는 다음과 같이 설정되어 있습니다.
Rails.application.routes.draw do
devise_for :users
root 'static_pages#index'
resources :events do
resources :workouts do
resources :rounds
end
end
내 컨트롤러에서 이것은 새로운 방법을 사용하는 방법입니다.
New Method for Event
def new
@event = current_user.events.new
end
New Method for Workout
def new
@workout = Workout.new
end
New Method for Round
def new
@round = Round.new
end
현재 이벤트보기 폴더 아래에 양식이 있습니다. 이벤트의 show.html.erb
이 파일을 볼에서 나는
<% @workout.rounds.each do |round| %>
<%= round.weight %>
<% end %>
에 의해뿐만 아니라 라운드를 표시하려고하지만 undefined method for rounds
을 얻고있다. 이벤트보기에서 라운드를 표시 할 수 있습니까?
도움 주셔서 감사합니다.
편집 1 :
여기 내 중첩 된 형태이다. 맨 위에는 이벤트 용 양식이 있습니다.
<%= simple_form_for @event do |f| %>
<%= f.input :title %>
<h3>Work Outs</h3>
<div id="workouts">
<%= f.simple_fields_for :workouts do |workout| %>
<%= render 'workout_fields', f: workout %>
<% end %>
<div class="links">
<%= link_to_add_association 'add workout', f, :workouts %>
</div>
</div>
<div class="field">
<%= f.label :start_time %><br>
<%= f.datetime_select :start_time %>
</div>
<div class="field">
<%= f.label :end_time %><br>
<%= f.datetime_select :end_time %>
</div>
<div class="field">
<%= f.label :description %><br>
<%= f.text_area :description %>
</div>
<div class="actions">
<%= f.submit "Create new Workout" %>
</div>
<% end %>
<% end %>
</form>
는 그런 운동
<div class="nested-fields">
<%= f.input :name %>
<div class="rounds">
<%= f.simple_fields_for :rounds, :wrapper => 'inline' do |round| %>
<%= render 'round_fields', f: round %>
<% end %>
<div class="links">
<%= link_to_add_association 'add round', f, :rounds, :render_option => { :wrapper => 'inline' } %>
</div>
</div>
<%= link_to_remove_association "remove workout", f %>
</div>
의 형태가 그리고 마지막으로, 나는 레일 콘솔에서 라운드 생성하고 저장할 수 있어요 라운드
<div class="nested-fields">
<table class="table round-table">
<tr>
<td>
<% index = 0 %>
<%= f.simple_fields_for :rounds do |round| %>
<%= render 'set_fields', {f: round, index: index} %>
<% index = index + 1 %>
<% end %>
</td>
<td>Previous Weight</td>
<td><%= f.input_field :weight %></td>
<td><%= f.input_field :repetition %></td>
<td><%= link_to_remove_association "remove rounds", f %></td>
</tr>
</table>
</div>
의 형태를 갖는다. 그러나 웹에서 양식을 사용하면 저장할 수 없습니다.
편집 2
이 내가 event_params
및 workout_params
셋업을 얼마나 현재. 그런 다음 workout_params
def event_params
params.fetch(:event, {}).permit(:title, :description, :start_time, :end_time, :workouts_attributes => [:id, :name, :category, :_destroy])
end
는 :
def workout_params
params.require(:workout).permit(:name, :category, :rounds_attributes => [:id, :weight, :set, :repetition, :_destroy])
end
나는 양식 이벤트와 운동을 절약 왜 혼란 스러워요. 그러나 Round는 항상 빈 배열을 반환합니다.
'EventsController # show' 액션에서 @workout을 설정하고 있습니까? – user3680688
has_many associations 때문에 필요하지 않다고 생각했습니다. 운동을 event.workouts에 설정해야합니까? –