Question

J'essaie de comprendre field_for de Rails, en particulier ce qui doit entrer dans le contrôleur pour les ressources imbriquées.Mon problème est que lorsque je crée une bande dessinée avec des pages de bande dessinée via le formulaire Bande dessinée, l'image de la page n'est pas enregistrée.

J'ai des utilisateurs, des bandes dessinées et des ComicPages.Voici les modèles :

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

Voici le formulaire pour Comic, où je souhaite également ajouter 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 %>

Je suis confus au sujet du comics_controller (nouvelles et créations d'actions).Comment puis-je transmettre les paramètres comic_page à ce contrôleur ???

  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

Merci beaucoup!

--- MODIFIER ---

Après la réponse pour les paramètres, je l'ai utilisé pour créer l'action de création suivante :

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
Était-ce utile?

La solution

Vous devez autoriser ces champs à partir de comic_pages que vous souhaitez enregistrer dans le comic_params section de votre contrôleur

params.require(:comic).permit(:title, :synopsis, comic_pages_attributes: [:comic_page_image])
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top