2016-10-14 12 views
0

Я новичок в разработке проекта rails, у меня есть вложенная форма для отправки Event и Ticket с использованием gem 'cocoon'.And формы имеют некоторые check_boxes. Когда вы отправляете новое, это не имеет значения, но в редактировании вы не можете пометить мои флажки.с использованием кокона и флажков, я не знаю, как распознать проверенные: true или false in edit

Как это сделать, учитывая мой код ниже?

Моя ошибка

undefined method `include?' for nil:NilClass 

    <%= f.check_box :payment_type, { multiple: true ,checked:f.object.payment_type.include?(pay), include_hidden: false }, pay %> 
    <%= f.label :payment_type, pay, :value => i %> 

My Model

class Event < ActiveRecord::Base 
    has_many :tickets, inverse_of: :event 
    accepts_nested_attributes_for :tickets, allow_destroy: true 

class Ticket < ActiveRecord::Base 
    belongs_to :event 

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

class EventsController < ApplicationController 
    before_action :set_event, only: [:show, :edit, :update, :destroy] 

    def new 
     @event = Event.new 
    end 

    def create 
    @event = Event.new(event_params) 
     if @event.save 
      flash[:notice] = 'wow' 
     redirect_to @event 
     else 
      flash[:notice] = 'oh..' 
      render 'new' 
     end 
    end 

    def edit 
    end 

    def update 
     if @event.update(event_params) 
     redirect_to @event 
     else 
     render 'edit' 
     end 
    end 

Моя форма

<div class="nested-fields"> 
<h3>tickets</h3> 


<div class="row formsection text-center"> 
    <div class="col-md-3"> 
    <span class="label-title">fee</span> 
    </div> 
    <div class="col-md-9"> 
    <div class='input-group'>  
    <%= f.text_field :fee, :placeholder => "fee" , :class => "form-control" %> 
    </div> 
    </div> 
</div>  


<div class="row formsection text-center"> 
    <div class="col-md-3"> 
    <span class="label-title">payment</span> 
    </div> 

    <div class="col-md-9"> 
    <%= f.hidden_field :id %> 

<% payments = { 'paypal' => 1, 'credit card' => 2 } %> 
<% payments.each do |pay,i| %> 

<%= f.check_box :payment_type, { multiple: true ,checked: f.object.payment_type.include?(i), include_hidden: false }, i %> 
<%= f.label :payment_type, pay, :value => i %> 

<br> 
<% end %> 

    </div>  
</div> 


<%= link_to_remove_association 'remove this', f %> 
</div> 
+0

Ваших отступов/форматирование повсюду. Хотя это может показаться неважным, поскольку компьютер ему не нужен, он упрощает чтение кода и упрощает его просмотр/понимание. Поэтому это имеет значение. Сначала вы пишете код, который нужно прочитать _ людьми (например, вы сами). – nathanvda

ответ

0

Не знаете, почему он работает на new, но если payment_type еще не установлен, и, как ничто, это даст ошибку, которую вы показали.

Так вместо того, чтобы написать что-то вроде:

<%- checked_value = f.object.payment_type.present? && f.object.payment_type.include?(i) %> 
<%= f.check_box :payment_type, { multiple: true ,checked: checked_value, include_hidden: false }, i %> 

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

  • Нет связанных вопросов^_^