Я использую has_nested_attributes_for для создания двух записей двух разных моделей (родителя и ребенка). В настоящее время с использованием has_nested_attributes моя форма new.html.erb на родительском сервере успешно создает родительский элемент и дочерний элемент и связывает их вместе. Тем не менее, Родительские записи могут have_many связанная с этим модель детей. Поэтому из новой формы мне нужно иметь возможность вводить атрибут url (столбец родительской модели) и если url уже существует ... Он должен всплывать как уже существующий Parent (я могу использовать «rails-jquery» -autocomplete 'для этого, если требуется jquery) ... тем самым устанавливая существующий родительский идентификатор в форме. Если, однако, он еще не существует, форма должна создать новую родительскую запись и дочернюю запись, как это в настоящее время успешно выполняется.Создайте новую запись модели или посмотрите, существует ли она уже с использованием формы nested_attributes - Rails 4
Как мне изменить свой контроллер и просмотреть, чтобы выполнить эту условную вложенную форму? спасибо,
Родитель контроллер:
class StoriesController < ApplicationController
def new
@story = Story.new
video = @story.videos.build
end
def create
@story = Story.new(story_params)
if @story.save
flash[:success] = "Your story video has been created."
redirect_to current_narrator
else
flash[:alert] = "Your story or video could not be saved. Please include all fields."
render 'new'
end
end
private
def story_params
params.require(:story).permit(:headline, :url, videos_attributes: [
:imovie,
:director_id
],)
end
end
App/Views/Истории new.html.erb:
<!-- New Story Nested Form -->
<% provide(:title, 'New Story') %>
<div class="container s-in-reg">
<div class="authform">
<h1>New Story</h1>
<%= form_for @story do |f| %>
<div class="field">
<%= f.label :headline %><br />
<%= f.text_field :headline %>
</div><br/>
<div class="field">
<%= f.label :url %><br />
<%= f.text_field :url %>
</div><br/>
<%= f.fields_for :videos do |builder| %>
<div class="field">
<%= render 'video_fields', f: builder %>
# Video_fields partial contains the nested video fields required
</div>
<% end %>
<%= f.submit "Post this story", class: "btn btn btn-info" %>
<% end %>
</div>
</div>
Story.RB Модель:
has_many :videos
accepts_nested_attributes_for :videos
validates :headline, presence: true
validates :url, presence: true, uniqueness: true
Video.RB Модель :
class Video < ActiveRecord::Base
belongs_to :story
belongs_to :user
has_attached_file :mpeg
has_nested_attributes_for :story
end
благодаря shlajin ... поэтому я добавил свой ребенок модель на пост & included has_nested_attributes_for: parent. Но не могли бы вы дать мне представление о том, как этот код может искать действие create? – BB500
Хммм ... Я не совсем уверен, что следую за тобой. Ваша родительская модель - «История», ваш ребенок - «Видео» - что вы хотите создать: «Видео» и ассоциировать или создать «Историю» внутри нее или вы хотите создать «Историю», связать или создать или несколько «видео» с ним? – shlajin
Ну, если история уже существует, форма должна идентифицировать эту историю (через уникальный URL-адрес, который вводит пользователь) и связать новое видео с существующей записью Story. Если URL-адрес ввода пользователя не может быть найден (и, следовательно, история с использованием этого url не существует) ... форма должна создавать как историю, так и видео и ассоциировать их. поэтому я хочу сделать как по существу. – BB500