Rails fields_for не рендеринг на странице - PullRequest
0 голосов
/ 07 февраля 2019

Я пытаюсь реализовать форму, связанную с видео, когда создаю новый учебник.Проблема в том, что моя форма не отображается при каждом посещении страницы.Может ли кто-нибудь помочь, пожалуйста?

Это myapp / views / admin / tutorials / new.html.erb

<h2>New Tutorial</h2>
<%= form_for [:admin, @tutorial] do |f| %>
  <%= f.label :title %>
  <%= f.text_field :title, class: "block col-4 field" %>
  <%= f.label :description %>
  <%= f.text_area :description, class: "block col-4 field"  %>
  <%= f.label :thumbnail %>
  <%= f.text_field :thumbnail, class: "block col-4 field"  %>

  <h3>Videos</h3>

  <%= f.fields_for :videos do |builder| %>
    <%= builder.label :youtube_url %>
    <%= builder.text_field :youtube_url, class: "block col-4 field" %>
    <%= builder.label :video_id %>
    <%= builder.text_field :video_id, class: "block col-4 field" %>
  <% end %>

  <%= f.submit "Save", class: "mt2 btn btn-primary mb1 bg-teal"  %>
<% end %>

Это моя модель видео

class Video < ApplicationRecord
  has_many :user_videos
  has_many :users, through: :user_videos
  belongs_to :tutorial

  validates_presence_of :position 
end

И мой учебник модель

class Tutorial < ApplicationRecord
  has_many :videos, ->  { order(position: :ASC) }, dependent: :destroy
  acts_as_taggable_on :tags, :tag_list
  accepts_nested_attributes_for :videos

  scope :without_classroom, -> { where(classroom: false) }
end

Мой контроллер:

 class Admin::TutorialsController < Admin::BaseController

  def new
    @tutorial = Tutorial.new
  end

  def create
    @tutorial = Tutorial.new(tutorial_params)
    if @tutorial.save
      flash[:success] = "Successfully created tutorial!"
      redirect_to tutorial_path(@tutorial)
    else
      render :new
    end
  end

  def edit
    @tutorial = Tutorial.find(params[:id])
  end

  def update
    tutorial = Tutorial.find(params[:id])
    if tutorial.update(tutorial_params)
      flash[:success] = "#{tutorial.title} tagged!"
    end
    redirect_to edit_admin_tutorial_path(tutorial)
  end

  private
  def tutorial_params
    params.require(:tutorial).permit(:tag_list, :title, :description, :thumbnail)
  end
end

1 Ответ

0 голосов
/ 07 февраля 2019

Причина, по которой ничто не отображается, в том, что ассоциация videos пуста.Например, если вы добавите @tutorial.videos.build в действие контроллера new, вы получите один набор полей, а если у вас будет несколько видео в ассоциации (сохранено или нет), вы получите один набор полей длявидео.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...