2016-12-17 2 views
0

Я создаю веб-сайт, на котором люди могут читать манги, благодаря трем эстафетам: один для самой манги, один для своих глав и последний для страниц главы. В моем routes.rb файла, я вложенные страницах внутри главе ресурсов, которые я вложенные внутри манг, так что мои маршруты выглядеть следующим образом:Проблема с вложенным параметром form_for

resources :mangas do 
    resources :chapters do 
     resources :pejis #Rails doesn't like the "scan" word 
    end 
    end 

я могу создать манг без проблем, но неизвестно причина, я не могу управлять, чтобы сделать форму появится:

просмотры/глава/_form.html.erb

<%= form_for(chapter) do |f| %> 

    <div class="field"> 
    <%= f.label :titre %> 
    <%= f.text_field :titre %> 
    </div> 

    <div class="field"> 
    <%= f.label :apercu %> 
    <%= f.file_field :apercu %> 
    </div> 

    <div class="field"> 
    <!-- Allows me to upload the chapter's pages in the same time --> 
    <label for="images[]">Multi Upload</label> 
    <%= file_field_tag 'images[]', type: :file, multiple: true %> 
    </div> 

    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

form_for параметр, как это было при создании команды эшафота. Однако, очевидно, это не сработало, так как я вложил ресурсы в эскиз манги. Я пробовал несколько вещей, пока new_manga_chapter_path не позволил мне увидеть форму. Однако при отправке я получаю следующую ошибку: No route matches [POST] "/mangas/1/chapters/new". Я даже не уверен, что это нормально или странно.

Я уверен, что я не должен ставить «new_manga_chapter_path» в качестве параметра для form_for, но я понятия не имею, что положить вместо этого.

Только в случае, здесь глава управления:

class ChaptersController < ApplicationController 
    before_action :set_chapter, only: [:show, :edit, :update, :destroy] 

    def index 
    @chapters = Chapter.all 
    end 

    def show 
    end 

    def new 
    @chapter = Chapter.new 

    end 

    def edit 
    end 

    def create 
    @chapter = Chapter.new(chapter_params) 

    if @chapter.save 
     (params[:images] || []).each_with_index do |image, index| 
     @chapter.pejis.create(image: image, scan_number: index + 1) 
     end 
     redirect_to @chapter, notice: 'Chapter was successfully created.' 
    else 
     render :new 
    end 
    end 

    def update 
    if @chapter.update(chapter_params) 
     (params[:images] || []).each_with_index do |image, index| 
     @chapter.pejis.create(image: image, scan_number: index + 1) 
     end 
     redirect_to @chapter, notice: 'Chapter was successfully updated.' 
    else 
     render :edit 
    end 
    end 

    def destroy 
    @chapter.destroy 
    redirect_to chapters_url, notice: 'Chapter was successfully destroyed.' 
    end 

    private 

    def set_chapter 
     @chapter = Chapter.friendly.find(params[:id]) 
    end 

    def chapter_params 
     params.require(:chapter).permit(:titre, :apercu) 
    end 
end 

Не стесняйтесь, если вы хотите увидеть что-то еще

Спасибо заранее

ответ

2

Попробуйте это:

# don't replace the [] by() 
<%= form_for [@manga, @chapter] do |f| %> 

или

<%= form_for manga_chapter_path(@manga, @chapter) %> 

И в контроллере:

def new 
    @manga = Manga.find(params[:manga_id]) 
    @chapter = Chapter.new 
end 

Чтобы помочь вам после того, как ваши комментарии: В вашем методе создания:

def create 
    @manga = Manga.find(params[:manga_id]) 
    @chapter = Chapter.new(chapter_params) 

    if @chapter.save 
     (params[:images] || []).each_with_index do |image, index| 
     @chapter.pejis.create(image: image, scan_number: index + 1) 
     end 
     redirect_to manga_chapter_path(@manga, @chapter), notice: 'Chapter was successfully created.' 
    else 
     render :new 
    end 
    end 
+0

И думать я думал об этом anwser себя, но не может установить это вверх. Большое спасибо !! – Jaeger

+0

Однако у меня есть последний (маленький) вопрос: все работает, но я не могу получить доступ к главе после ее создания (он не работает при перенаправлении). Я пробовал с manga_chapter_path (id: @ chapter.id, manga_id: @ manga), но он не может найти @ manga, даже подумал, что добавил его в функцию set_chapter. Любая идея? – Jaeger

+0

Какая ошибка? Вы должны добавить в конце метода (возможно, создать) «redirect_to manga_path (@manga)» –

Смежные вопросы