У меня странная проблема.Я только что развернул свое Rails-приложение на Heroku.Но кажется, что-то не так с функцией переключения, которая изменяет логические данные с 0 на 1. в PostgreSQL.
Ruby 2.4.5
Rails 4.2.8
Heroku
PostgreSQL(production)
MySQL(development)
Я ожидаю, что каждый раз, когда пользователь ставит или выключает галочку, столбец, соответствующий данным, должен быть измененОт 1 до 0 или от 0 до 1.
Я пытался использовать «true» вместо «1» и «TrueClass» и так далее.Но все они не работали.
поток обработки
Вот поток обработки от пользователя, поставившего галочку или выключив флажок на _item.html.erb для базы данных Heroku (postgreSQL).
_item.html.erb
<%= check_box_tag '', '', item.check, {'data-id' => item.id, 'data-user-id' => item.user_id ,class: "check_#{item.id} option-input"} %>
javascript
$(document).on('turbolinks:load', function() {
$("input[type=checkbox]").click(function(){
$.post('/items/'+$(this).data('id')+'/toggle');
});
});
items_controller.rb
def toggle
render nothing: true
@item = Item.find(params[:id])
#I just changed here to some other pattern
@item.check = !@item.check
@item.save
#didn't work
if @item.check.is_a?(FalseClass)
@item.check = '1'
else
@item.check = '0'
end
@item.save
#didn't work
if @item.check.is_a?(FalseClass)
@item.check = true
else
@item.check = false
end
@item.save
#didn't work
if @item.check.is_a?(FalseClass)
@item.check = (TrueClass)
else
@item.check = (FalseClass)
end
@item.save
#didn't work
if @item.check.is_a?(FalseClass)
@item.check = 1
else
@item.check = 0
end
@item.save
end
Журналы Heroku
2019-04-17T00:30:51.155800+00:00 heroku[router]: at=info method=POST path="/items/8/toggle" host=********* request_id=0403023c-56f5-4933-82af-be33b21dd21e fwd="130.212.95.200" dyno=web.1 connect=0ms service=25ms status=200 bytes=880 protocol=https
2019-04-17T00:30:51.137644+00:00 app[web.1]: Started POST "/items/8/toggle" for 130.212.95.200 at 2019-04-17 00:30:51 +0000
2019-04-17T00:30:51.141054+00:00 app[web.1]: Processing by ItemsController#toggle as */*
2019-04-17T00:30:51.141085+00:00 app[web.1]: Parameters: {"id"=>"8"}
2019-04-17T00:30:51.145264+00:00 app[web.1]: [1m[36mUser Load (1.2ms)[0m [1mSELECT "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT 1[0m [["id", 2]]
2019-04-17T00:30:51.146978+00:00 app[web.1]: Rendered text template (0.0ms)
2019-04-17T00:30:51.149372+00:00 app[web.1]: [1m[35mItem Load (1.3ms)[0m SELECT "items".* FROM "items" WHERE "items"."deleted_at" IS NULL AND "items"."id" = $1 LIMIT 1 [["id", 8]]
2019-04-17T00:30:51.151213+00:00 app[web.1]: [1m[36m (1.0ms)[0m [1mBEGIN[0m
2019-04-17T00:30:51.153240+00:00 app[web.1]: [1m[35m (1.0ms)[0m COMMIT
2019-04-17T00:30:51.153486+00:00 app[web.1]: Completed 200 OK in 11ms (Views: 0.4ms | ActiveRecord: 4.5ms)
Я предполагаю, что функция переключения работаетправильно.
Эта ошибка не отображается в среде разработки.Таким образом, кажется, что что-то различие между MySQL и PostgreSQL вызывает это.