使用 cocoon 和 checkboxes ,我不知道如何识别 checked: true 或 false in edit
using cocoon and checkboxes , I don't know how to recognize checked: true or false in edit
我是开发 rails 项目的新手,我有一个嵌套表单,用于使用 gem 'cocoon' 提交事件和票证。并且该表单有一些 check_boxes .
当你提交新的时候,没关系,但在编辑中,你不能在我的复选框中勾选。
根据下面的代码,我该怎么做?
我的错误
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 %>
我的模型
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>
不确定为什么它在 new
上有效,但是如果 payment_type
尚未设置,并且 nil 也未设置,这将给出您显示的错误。
所以改为写这样的东西:
<%- 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 %>
我是开发 rails 项目的新手,我有一个嵌套表单,用于使用 gem 'cocoon' 提交事件和票证。并且该表单有一些 check_boxes . 当你提交新的时候,没关系,但在编辑中,你不能在我的复选框中勾选。
根据下面的代码,我该怎么做?
我的错误
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 %>
我的模型
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>
不确定为什么它在 new
上有效,但是如果 payment_type
尚未设置,并且 nil 也未设置,这将给出您显示的错误。
所以改为写这样的东西:
<%- 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 %>