2016-04-29 2 views
0

У меня есть форма в моем приложении rails, которое принимает вложенные атрибуты. Однако я хочу, чтобы rails отклонял создание вложенной модели, если установлен флажок (вне самой модели).Отклонить создание вложенного атрибута, если флажок установлен

Любая идея о том, как передать атрибут опции: reject_if для accepts_nested_attributes_for в модели с контроллера?

спасибо, что заранее.

EDIT:

Мой контроллер выглядит следующим образом:

def new 
    @course = Course.new 
    @course.course_template = CourseTemplate.new 
end 

def create 
    @course = Course.new(course_params) 
    @course.user = current_user 
    if @course.save 
    flash[:success] = t(".new_course_created_succefully") 
    redirect_to courses_path 
    else 
    render 'new' 
    end 
end 

и форма:

<%= form_for @course do |f| %> 
    <%= render 'shared/error_messages', error_model: @course %> 

    <div class="form-group has-feedback mb"> 
    <%= f.label :name %> 
    <%= f.text_field :name, class: 'form-control' %> 
    </div> 

    <div class="form-group has-feedback mb"> 
    <div class="checkbox c-checkbox needsclick"> 
     <label class="needsclick"> 
     <%= check_box_tag "template", "1", false, {class: "needsclick"} %> 
     <span class="fa fa-check"></span>Is Template? 
     </label> 
    </div> 
    </div> 

    <%= f.fields_for :course_template do |ff| %> 
    <div class="form-group has-feedback mb"> 
     <%= ff.label :name %> 
     <%= ff.text_field :name %> 
    </div> 
    <% end %> 
<% end %> 
+0

можете ли вы разместить форму и контроллер? – PhilVarg

+0

Извините. Сделано – InesM

ответ

1

отправить этот флажок в качестве параметра из формы и положить Операция build внутри, если старосты т. Не нужно беспокоиться о reject_if Вам необходимо обрабатывать операции создания и сборки отдельно. поэтому вместо прохождения вашей модели все атрибуты, вы будете передавать модели атрибутов модели, а также ассоциации, вложенные атрибуты

# controller 
course = Course.new(course_params.reject{|attrib| attrib == :course_template_attributes}) 

unless params[:skip_create] 
    course.course_templates.build(course_params[:course_template_attributes] 
end 
... 

то, что вам нужно сделать, это условно создать course_templates, так что вы можете просто передать Course.new все ваши course_params, потому что это создает как курс, так и шаблоны, которые необходимо выполнять отдельно.

Примечание. Я сокращаю это заявление reject. вы можете либо вручную добавить в различные параметры, либо лучше создать еще один метод с сильными параметрами и использовать только атрибуты модели (не включая атрибуты course_template_attributes)

дополнительно. params[:skip_create] не зависит от этого флажка, который определяет, хотите ли вы создавать шаблоны

+0

Хм ... Я не уверен, что вы хотите. Что у меня есть это: определение функции нового конечно = Course.new course.course_template = CourseTemplate.new end' определение функции создания курс = Course.new (course_params) если course.save вспышки [: успех] = т ("new_course_created_succefully") redirect_to courses_path еще делают 'новый' конец end' Где вы предлагаете мне сделать это? – InesM

+0

отредактируйте свое оригинальное сообщение, чтобы включить форму в свой вид и маршрут из вашего индекса. его не читается в этих комментариях – PhilVarg

+0

Это сработало благодаря – InesM

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