[Ruby On Rails] Root 이탈_path! 중첩된 하위 항목 뷰에서 중첩된 상위 항목으로 방향변경:show

8409 단어 RubyRails

글에 관하여


메모입니다.
routes.rb에서 부자 관계를 맺을 때 하위 컨트롤러의redirect_기록 to의 작법.
내가 지금까지 끼워 넣은 하위 컨트롤러의create 동작, 업데이트 동작의 리디렉션 루트_path로 해결했습니다.
루트 이탈_path를 목표로 합니다.

전제 조건


상위 항목: contents
하위 레벨:descriptions
routes.rb
root to: 'contents#index'

resources :contents, only: [:index, :new, :create, :show, :edit, :update] do
    resources :descriptions, only: [:new, :create, :edit, :update, :destroy]
위에서 말한 바와 같이, 하위 세대에 지정되지 않은 경우: show.
※ 편의를 위해 only 옵션으로 기술합니다.
rails routes↓

root_path에서 지정한 경우


descriptions_controller
(前略)

  def new
    @description = Description.new
  end

  def create
    @description = Description.new(description_params)
    if @description.save
      redirect_to root_path #ココです
    else
      render :new
    end
  end

  def edit
  end

  def update
    if @description.update(description_params)
      redirect_to root_path #ココです
    else
      render :edit
    end
  end

(後略)
이렇게 하면 "redirect_toroot_path"를 통해 중첩된 부모 세대의 contents#index로 이동할 수 있습니다.
그러나 정보를 업데이트한 후 첫 페이지로 날아가는 것이 사용자에게 무슨 불편한가.
특별히 첫 페이지에서 업데이트된 정보로 클릭해서 몇 페이지를 옮겨야 합니다.
따라서, 루트 이탈_path를 하고 싶습니다.

루트 이탈_path시


descriptions_controller.rb
  def new
    @description = Description.new
  end

  def create
    @description = Description.new(description_params)
    if @description.save
      redirect_to content_path(@description.content_id) #ココです
    else
      render :new
    end
  end

  def edit
  end

  def update
    if @description.update(description_params)
      redirect_to content_path(@description.content_id) #ココです
    else
      render :edit
    end
  end
root_path 설명 취소, content_path(@description.cont_id)로 변경되었습니다.
이러한 설명을 통해 "/contents/4/descriptions/new"와 "/contents/3/descriptions/edit"등 페이지에서 "/contents/1/"로 방향을 바꾸어 부모 쇼와 같은 동작을 할 수 있습니다.

사고 방법


하나하나 보다.
라우팅을 다시 확인합니다.

prefix를 주의하십시오. 콘텐츠가 적혀 있기 때문에redirect_to content_path로 쓰다.
descriptions_controller.rb
(前略)

    def create または def update
    @description = Description.new(description_params)
    if @description.save
      redirect_to content_path #ココです
    else

(後略)
위에서 설명한 대로 "content_path"로 기술하여 "/contents/"로 이동할 수 있습니다.
그래도 완전하지는 않아요.어떤 id에 맞는 페이지로 이전할지 기록해야 합니다.
id를 지정할 때의 요점은 다음과 같은 두 가지입니다.
  • create와 update까지의 파라미터를 확인합니다
  • "/contents/id/"로 id를 지정합니다
  • create와 update로 운송되는 파라미터의 내용을 확인하면

    content_id.
    따라서params의 실례 변수가 있음(@description)지정 (.)의 id(content_id)만 있으면 됩니다.
    descriptions_controller.rb
    (前略)
    
        def create または def update
        @description = Description.new(description_params)
        if @description.save
          redirect_to content_path(@description.content_id) #ココです
        else
    
    (後略)
    

    마지막


    나는 데이터의 흐름 등을 언어화하는 것은 매우 힘들다고 생각한다.
    저는 프로그래밍 초보자입니다. 만약 주도면밀하지 못한 점이 있으면 지적해 주십시오.

    참고문

    좋은 웹페이지 즐겨찾기