우선, 도움이되는 몇 가지 답변을 이미 찾았지만 (아래 링크 참조), 아직이 작업을하기 위해 애 쓰고 있습니다. 나는 오랫동안 프로그래밍을 해오 지 않았으며 이것은 이해하기 쉽다고 느끼는 것을 확실히 늘리고있다.레일 4 form_for 이중 중첩 된 코멘트
세 가지 모델이 있습니다. 예를 들어, 나무, 나무 껍질, 판화 (의견)라고 부를 것입니다. 사용자가 새로운 댓글 (판화)을 제출할 수 있도록 간단한 양식 부분을 추가하려고합니다. 에서
NoMethodError/나무/1 정의되지 않은 메서드`트리 '무기 호에 대한 : NilClass
컨트롤러
class TreesController < ApplicationController
def show
@barks = Bark.where(tree_id: @tree.id)
@engraving= Engraving.new(:bark=> @bark)
end
end
class BarksController < ApplicationController
def show
@engravin= Engraving.new(:bark=> @bark)
@engravings = Engraving.where(bark_id: @bark.id)
end
end
class EngravingsController < ApplicationController
def show
@bark= Bark.find(params[:bark_id])
@engraving = Engraving.new(params[:engraving])
end
end
def create
@bark = Bark.find(params[:bark_id])
@engraving = Engraving.new(params[:engraving])
@engraving.user_id = current_user.id
respond_to do |format|
if @engraving.save
format.html { redirect_to tree_bark_path(@tree, @bark), notice: 'Comment was successfully created.' }
format.json { render action: 'show', status: :created, location: @engraving}
else
format.html { render action: 'new' }
format.json { render json: @engraving.errors, status: :unprocessable_entity }
end
end
끝
모델
아래의 설정 오류를 생산
class Tree < ActiveRecord::Base
belongs_to :user
has_many :barks
has_many :engravings, through: :barks
end
class Bark< ActiveRecord::Base
belongs_to :user
belongs_to :tree
has_many :engravings
delegate :title, :link, :to => :tree, :prefix => true
def new_engraving_path
Rails.application.routes.url_helpers.new_tree_bark_engraving_path(book, self)
end
def serializable_hash(*args)
super.merge 'new_engraving_path' => new_engraving_path
end
end
class Engraving< ActiveRecord::Base
belongs_to :user
belongs_to :bark
delegate :tree, :to => :bark, :prefix => true
def to_edit_path
Rails.application.routes.url_helpers.edit_tree_bark_engraving_path bark_tree, bark, self
end
def to_path
Rails.application.routes.url_helpers.tree_bark_engraving_path bark_tree, bark, self
end
def serializable_hash(*args)
super.merge 'path' => to_path, 'edit_path' => to_edit_path
end
end
보기에서 양식 호출
트리보기 페이지에는 모든 Bark가 채워져 있습니다. Bark 요소를 클릭하면 Bark.content와 Engravings가 표시된 모달이 열립니다. 마지막 판화에서, 나는 새로운 판화를 만들기 위해 text_area 양식을 가지고 그것을 나무 껍질의 "조각"에 추가하고 싶습니다.
# trees\show.html.erb
<%= render @barks %>
# barks\_bark.html.erb
<%= render partial: 'barks/modal', locals: { bark: bark} %>
# barks\modal.html.erb
<% render partial: '/engravings/simpleForm', :collection => bark.engravings %>
# Form partial
<%= form_for @engraving, :url => (new_tree_bark_engraving_path(:tree_id => @bark.tree, :bark_id => @bark.id)) do |f| %>
<%= f.hidden_field :bark_id %>
<div class="field">
<%= f.text_area :content %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
경로
get "pages/home"
resources :trees do
collection do
get 'search'
post 'load_from_api'
end
resources :barks do
resources :engravings
end
end
resources :barks do
resources :engravings
end
root "trees#index"
다른 대답 소스
Rails Routing Error for nested form_for
Twice Nested Resource Form_For Issue
form_for with nested resources
감사합니다. 변수가 전달되었습니다. – user1573016
양식이 여러 번 표시됩니다. 부분 호출을 확인했지만 그 부분은 아닙니다. 양식의 수는 이전에 제출 한 의견의 수와 같습니다.왜 댓글의 개수가 표시 할 양식의 수를 결정합니까? – user1573016
문제는 부분 호출의 : 콜렉션입니다. 모두 고쳐! – user1573016