나는 현재 방문자가 잡지를 온라인으로 읽을 수있는 웹 사이트를 만들고 있습니다. 저는 잡지 자체를위한 발판을 만들었고 다른 하나는 잡지에 속한 페이지를 만들었습니다. 이렇게하면 잡지를 만드는 동안 페이지에 대한 다중 업로드를 만들 수 있으며 모든 것이 동시에 업로드됩니다.URL의 ID가 아닌 다른 데이터 전달
때 다음과 같이 I 둥지 잡지의 자원 내부 페이지 자원 :
resources :magazines do
resources :pages
end
나는 그것을 할 수 없기 때문에 "domain.com/magazines/<slug>/pages/id
"그러나
, 나는, ID가 몇 가지 문제가 있었다 얻을 (ID가 1로 돌아 가지 않으므로) 페이지를 세는 데 사용되므로, 나는 페이지를 셀 수있는 컨트롤러 내부에 함수를 만들고 각 페이지를 "page_number"값으로 저장합니다.
제 질문은 다음과 같습니다. 어떻게 id 대신 내 라우터에 : page_number를 사용하도록 요청할 수 있습니까? 나는이
resources :magazines do
get '/:page_number' => 'pages#show', as: :custom_page
end
처럼 보였다하지만 알 수없는 이유로, 레일 내 사용자 정의 경로가 단순히 내가 입력 할 때 존재에도 불구하고, 존재하지 않는 것을 알려줍니다 사용자 정의 경로를 만들려고 rake routes
은 사전에 감사
편집 여기
내 magazine_controller.rb
class MagazinesController < ApplicationController
before_action :authenticate_user!, only: [:edit, :update, :destroy]
before_action :set_magazine, only: [:show, :edit, :update, :destroy]
def index
@magazines = Magazine.all
end
def show
end
def new
@magazine = Magazine.new
end
def edit
end
def create
@magazine = Magazine.new(magazine_params)
if @magazine.save
if params[:images]
(params[:image] || []).each_with_index do |image, index|
@magazine.pages.create(image: image, page_number: index + 1)
end
redirect_to @magazine, notice: 'Magazine was successfully created.'
else
render :new
end
end
end
def update
if @magazine.update(magazine_params)
if params[:images]
params[:images].each { |image|
@magazine.pages.create(image: image)
}
end
redirect_to @magazine, notice: 'Magazine was successfully updated.'
else
render :edit
end
end
def destroy
@magazine.destroy
redirect_to magazines_url, notice: 'Magazine was successfully destroyed.'
end
private
def set_magazine
@magazine = Magazine.friendly.find(params[:id])
end
def magazine_params
params.require(:magazine).permit(:titre, :apercu)
end
end
여기 페이지
Started GET "/magazines/magazine-54/pages/11" for 127.0.0.1 at 2016-12-12 11:04:45 +0100
Processing by PagesController#show as HTML
Parameters: {"magazine_id"=>"magazine-54", "id"=>"11"}
Completed 500 Internal Server Error in 2ms (ActiveRecord: 0.0ms)
NoMethodError (undefined method `pages' for nil:NilClass):
app/controllers/pages_controller.rb:49:in `set_page'
Rendering /var/lib/gems/2.3.0/gems/actionpack-5.0.0.1/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb within rescues/layout
Rendering /var/lib/gems/2.3.0/gems/actionpack-5.0.0.1/lib/action_dispatch/middleware/templates/rescues/_source.html.erb
Rendered /var/lib/gems/2.3.0/gems/actionpack-5.0.0.1/lib/action_dispatch/middleware/templates/rescues/_source.html.erb (2.4ms)
Rendering /var/lib/gems/2.3.0/gems/actionpack-5.0.0.1/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb
Rendered /var/lib/gems/2.3.0/gems/actionpack-5.0.0.1/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (1.2ms)
Rendering /var/lib/gems/2.3.0/gems/actionpack-5.0.0.1/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb
Rendered /var/lib/gems/2.3.0/gems/actionpack-5.0.0.1/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb (0.7ms)
Rendered /var/lib/gems/2.3.0/gems/actionpack-5.0.0.1/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb within rescues/layout (13.8ms)
을에
page_number
열 관련 모델Page
과has_many :pages
가 있어야 작동하도록': id' param을 사용하고 id 대신 페이지 번호를 전달할 수 있습니다. 그런 다음'Page.find (params [: id]) 대신'magazine.pages.find_by (page_number : params [: id]) '와 같은 것을 호출 할 수 있습니다. –
답변 해 주셔서 감사합니다. 다음 오류 :'NameError (정의되지 않은 지역 변수 또는 PageController의 'magazine', 당신은 뜻? magazine_url)'. 그래서 나는'magazine' 대신'magazine_url'을 시도했지만, 이제는'pages'를 인식하지 못합니다.그러나 나는 여전히 그것을 page_number 대신에 매개 변수로 id를 얻으려고하는 것을 볼 수있다. – Jaeger
'magazine'은 그냥 의사 코드이며, 나는 작동 코드를 게시하기 위해 컨트롤러 코드를 모른다. '잡지'객체를 저장할 변수로'잡지'를 넣으십시오. –