2

레일즈의 field_for, 특히 중첩 된 리소스의 컨트롤러로 들어가야 할 것을 이해하려고합니다. 제 문제는 코믹 양식을 통해 만화 페이지가있는 만화를 만들 때 페이지의 이미지가 저장되지 않는다는 것입니다.레일 네개의 네스트 된 리소스에 대한 컨트롤러 액션

사용자, 만화 및 코믹 페이지가 있습니다. 여기 모델은 다음과 같습니다

다음
class User < ActiveRecord::Base 
    has_many :comics 
    has_many :comic_pages, through: :comics 
end 

class Comic < ActiveRecord::Base 
    belongs_to :user 
    has_many :comic_pages, :dependent => :destroy 
    accepts_nested_attributes_for :comic_pages 
end 

class ComicPage < ActiveRecord::Base 
    belongs_to :comic 
end 

가 나는 또한 comic_pages를 추가 할 경우, 만화의 형태이다 :

<%= form_for ([@user, @comic]) do |f| %> 
    <%= f.text_field :title %> 
    <%= f.fields_for :comic_pages do |comic_page| %> 
     <%= comic_page.file_field :comic_page_image %> 
    <% end %> 
    <div class="actions"> 
     <%= f.submit %> 
    </div> 
    <% end %> 

나는 comics_controller에 대한 혼란 스러워요 (새로운 작업을 생성). 이 컨트롤러에 comic_page 매개 변수를 전달하려면 어떻게합니까 ???

def new 
    @user = current_user 
    @comic = @user.comics.new 
    @comic.comic_pages.build 
    end 

    def create 
    @user = current_user 
    @comic = @user.comics.new(comic_params) 
    @comic.comic_pages.build 

    respond_to do |format| 
     if @comic.save 
     format.html { redirect_to @user, notice: 'Comic was successfully created.' } 
     format.json { render action: 'show', status: :created, location: @user } 
     else 
     format.html { render action: 'new' } 
     format.json { render json: @comic.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

private 
# Use callbacks to share common setup or constraints between actions. 
def set_comic 
    @comic = Comic.find(params[:id]) 
end 

# Never trust parameters from the scary internet, only allow the white list through. 
def comic_params 
    params.require(:comic).permit(:title, :synopsis) 
end 

def comic_page_params 
    params.require(:comic_page).permit(:comic_page_image, :comic_image_file_name) 
end 

많은 감사!

def create 
    @user = current_user 
    @comic = @user.comics.new(comic_params) 

    i = 0 
    until i = 1 
     @comic_page = @comic.comic_pages.new(comic_params[:comic_pages_attributes]["#{i}"]) 
     @comic_page.save 
     i += 1 
    end 

    respond_to do |format| 
     if @comic.save 
     ... 
     end 
    end 
    end 
+0

안녕하세요, 여기 nwebie. 도움이 필요해. 귀하의 사례는 일대 다 다투 접근법을 사용했고 귀하는 그것을 작동하게 만들었습니다. 중첩 된 양식을 일대 다 단순 접근 방식으로 사용할 수 있습니까? (단순, 의미 없음': through' 테이블) – zhirzh

답변

2

당신은 당신이 원하는 comic_pages에서 해당 필드를 허용해야합니다

은 --- 편집 ---

params 객체를 파라미터에 대한 대답 후에, 나는 만들 다음 조치를 생성하는 데 사용 컨트롤러의 comic_params 섹션에 저장하십시오.

params.require(:comic).permit(:title, :synopsis, comic_pages_attributes: [:comic_page_image]) 
+0

답변 주셔서 감사합니다! 나는 약간 땜질했고 내 컨트롤러가 어떻게 보이는지 게시 할 것입니다. – Jayway