0
我有一個名爲:active
的布爾字段,可通過Ajax進行更改。我有它的工作,取消選中框,從而使布爾假,或者,在數據庫中,它刪除該屬性使其爲空,但仍然工作。複選框不使用Ajax
我的問題是它不能正常工作。我可以檢查框以使布爾值爲TRUE,看起來它正在做某事,但它實際上並未在數據庫中做出更改。
在Webbrick的輸出顯示它更新:
Processing by CompaniesController#toggle as JS
Parameters: {"Active"=>"228", "id"=>"228"}
SQL (0.5ms) UPDATE "companies" SET "active" = $1, "updated_at" = $2
WHERE "companies"."id" = $3 [["active", nil],
["updated_at", 2017-02-15 17:26:19 UTC], ["id", 228]]
(0.8ms) COMMIT
但數據庫沒有更新。我看到上面說的[[「active, nil]
,這是不正確的部分。所以從技術上說,更新正在工作,但我很確定我的控制器是爲什麼它要發送nil
重新檢查。
那麼,如何在我的控制器中發送布爾值TRUE
,如果這確實是我應該這樣做的地方。
companies_controller.rb
def toggle
@company = Company.find(params[:id])
if @company.update_attributes(active: params[:active])
# todo: maybe give a notice
else
# todo: maybe give a notice
end
end
index.html.rb
<%= check_box_tag 'Active', company.id, company.active,
data: {
remote: true,
url: url_for(action: :toggle, id: company.id),
method: "POST"
} %>
的routes.rb
resources :companies do
resources :comments
member do
post 'toggle'
end
end
編輯
我把它改變我的控制器if語句使用工作。不知道這是否是最好的方法,但它現在可以在兩個方向上工作。
companies_controller.rb
def toggle
@company = Company.find(params[:id])
if @company.active
@company.update_attributes(active: FALSE)
else
@company.update_attributes(active: TRUE)
end
end
如果您只是想修復您現有的代碼,而不是錯誤的是您使用'company.id'作爲複選框的值 - 而不是布爾列。 – max
我最終看到'(active:params [:active])'給出'id'而不是布爾值。你的回答(下面)增加了jQuery,但是消除了路由的混亂。我也會嘗試這種方式。 – Reveren
如果您使用的是rails_ujs,則您已將jQuery作爲依賴項。 – max