2016-04-29 75 views
0

我在接受嵌套屬性的rails應用程序中有一個表單。但是,我想要做的是如果複選框(在模型本身之外)被選中,rails會拒絕創建嵌套模型。如果複選框被選中,則拒絕創建嵌套屬性

如何傳遞給一個屬性的任何的想法:accepts_nested_attributes_for的reject_if選項從控制器的型號?

非常感謝您提前。

編輯:

我的控制器看起來是這樣的:

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聲明shorthanding那裏。您可以手動在各個PARAMS具有較強的PARAMS和白名單隻有模型屬性(不包括course_template_attributes)

另加或更好,但創造的另一種方法。該params[:skip_create]是什麼參數是該複選框是決定你是否要創建模板

+0

哼哼......我不確定你想說的是什麼。 '高清新 當然= Course.new course.course_template = CourseTemplate.new end' '高清創建 當然= Course.new(course_params) 如果course.save 閃光燈[:我有這樣的:成功= T( 「new_course_created_succefully」) redirect_to的courses_path 其他 呈現 '新' 結束 end' 你在哪裏建議我這樣做嗎? – InesM

+0

請修改您的原始帖子,以便在您的視圖中包含該表單以及您的索引中的路線。它在這些意見中不可讀 – PhilVarg

+0

工作表示感謝 – InesM

相關問題