Frage

Ich versuche, Field_for von Rails zu verstehen, insbesondere, was für verschachtelte Ressourcen in den Controller gelangen soll.Mein Problem besteht darin, dass das Bild der Seite nicht gespeichert wird, wenn ich über das Comic-Formular einen Comic mit Comic-Seiten erstelle.

Ich habe Benutzer, Comics und ComicPages.Hier sind die Modelle:

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

Hier ist das Formular für Comic, wo ich auch comic_pages hinzufügen möchte:

 <%= 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 %>

Ich bin verwirrt über den comics_controller (Neu- und Erstellungsaktionen).Wie kann ich comic_page-Parameter an diesen Controller übergeben???

  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

Vielen Dank!

--- BEARBEITEN ---

Nach der Antwort auf die Parameter habe ich damit die folgende Erstellungsaktion erstellt:

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
War es hilfreich?

Lösung

Sie müssen diese Felder zulassen comic_pages die Sie im speichern möchten comic_params Abschnitt Ihres Controllers

params.require(:comic).permit(:title, :synopsis, comic_pages_attributes: [:comic_page_image])
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top