почему логические атрибуты сохраняются как нулевые, даже если им присвоены значения по умолчанию для mysql - PullRequest
0 голосов
/ 01 сентября 2018

Это должно быть прямой ошибкой, но я не могу точно определить, почему это происходит. Я изменил свой пост с более раннего вопроса, который я не очень точно опубликовал в своем проекте. Вот лучший пост для тех из вас, кто мог видеть предыдущий. По сути, у меня есть два логических значения, :accepted и :complete. Я назначил значения по умолчанию :accepted => true и :complete => false, но они все равно сохраняются как нулевые, когда я создаю новый объект :accept. Файлы:

acceptpts_controller.rb (создание и параметры)

def create
  @self_delivery = SelfDelivery.find_by(
    id: params[:self_delivery_id])

  begin
    @accept = Accept.create(
      :user_id => current_user.id,
      :self_delivery_id => @self_delivery.id,
      :accepted => params[:accepted],
      :complete => params[:complete])

  rescue ActiveRecord::RecordNotUnique => e
    flash[:notice]= 'Duplicate Record'
  end

  if @accept.save!
    redirect_to accept_path(@accept)
    flash[:notice]= 'Accept was successfully created.'
  end
end

new.html.erb

<h1>New Accept</h1>

<%= form_with(model: @accept, url: self_delivery_accepts_path(:user_id => params[:user_id], :self_delivery_id => params[:self_delivery_id]), :method => :post) do |form| %>
<% if @accept.errors.any? %>
<div id="error_explanation">
  <h2><%= pluralize(@accept.errors.count, "error") %> prohibited this accept from being saved:</h2>

  <ul>
  <% @accept.errors.full_messages.each do |message| %>
    <li><%= message %></li>
  <% end %>
  </ul>
 </div>
<% end %>

<div class="field">
<%= form.label :accepted %>
<%= form.check_box :accepted, checked: true %>
</div>

<div class="field">
<%= form.label :complete %>
<%= form.check_box :complete, checked: true %>
</div>

<div class="actions">
<%= form.submit %>
</div>
<% end %>


<%= link_to 'Back', self_delivery_accepts_path(:self_delivery_id => params[:self_delivery_id], :accepted => params[:accepted], :complete => params[:complete]) %>

ставит params.inspect

<ActionController::Parameters {"utf8"=>"✓", "authenticity_token"=>"ANOwCS3enYdqqcN01iAJg7EgRDhAC/Gpb3/h6yCGz2qSrKEz874ANBYeKGQuKSc3ctopIixI4rKiKuC5FJdsnQ==", "accept"=>{"accepted"=>"1", "complete"=>"0"}, "commit"=>"Create Accept", "controller"=>"accepts", "action"=>"create", "self_delivery_id"=>"1"} permitted: false>

1 Ответ

0 голосов
/ 01 сентября 2018

Это то, что приходит в качестве параметров из вашего интерфейса:

..., "accept"=>{"accepted"=>"1", "complete"=>"0"}, ...

означает, что в вашем коде вы должны соблюдать этот формат:

:accepted => params['accept']['accepted'],
:complete => params['accept']['complete']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...