![](/img/trans.png)
[英]How to make Rails generate 'schema.rb' with bigint support for MySQL?
[英]schema.rb and mysql database issue in ruby on rails
首先,我已經學習Rails 8個月了,但是感覺就像昨天開始的一樣,所以請多多包涵。 我正在嘗試解決為什么我的值(稱為visible)無法正常運行的原因。 我正在使用Simple_form。 “可見”是單選按鈕的值:
<div class='review-form'>
<%= simple_form_for(@review) do |f| %>
# input boxes for current_user to put text here
#'public' radio button, checked by default, class is for css
<%= f.radio_button :visible, "true" , :class => "share_button" %>
#'private' radio button, class is for css
<%= f.radio_button :visible, "false", :class => "keep_private_button" %>
#user can cancel
<%= link_to I18n.t('write_review.cancel_button'), landing_page,
:class => 'btn' %>
#user can submit
<%= f.button :submit, I18n.t('write_review.submit_button'),
:class => 'btn btn-primary' %>
想法是current_user撰寫評論-如果他們將評論設為“公開”,則其他任何用戶都可以看到它,如果為私人,則只有他們可以看到它。 單選按鈕可以正常工作-當我注銷,在其他計算機上查看應用程序等時,單選按鈕處於上次保存狀態。 問題在於,無論單選按鈕的狀態如何,當前的評論@review對所有人始終可見。
我把<%= @review.visible? %>
<%= @review.visible? %>
在評論表單上。 每次刷新頁面時,即使單選按鈕可能為假,它也為“ true”。 我保存評論,然后@ review.visible然后進行相應匹配。 但隨后我刷新,它又恢復為真。
我認為問題可能是:
在我的schema.rb中,我有:
t.boolean "visible", :default => true
我刪除了:default => true
,沒有任何改善,但是我聽說您無論如何都不應該手動干預schema.rb。
您是否認為default => true引起了問題? 做“遷移”會是走的路嗎? 在遷移過程中,我該如何表達“默認=> true”部分?
最后,盡管我的schema.rb具有“布爾值”,但我的實際數據庫仍然visible: tinyint(1)
,我認為這很可惡,但我已經在線閱讀了它們,實際上是同一回事,所以我認為那不是問題-如果您有不同的看法,請告訴我。
您不應該觸摸db / schema.rb。 這會通過遷移和/或數據庫狀態自動更新。 您有正確的想法,因為您需要刪除“ visible”的默認值,但是您需要在遷移中執行此操作。 change_column_default可能就是您想要的。
http://apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/change_column_default
而且,布爾值vs tinyint(1)可以。 這是MySQL的事情,因為MySQL沒有真正的布爾類型。
為了回應Phillip所說的話(如果您需要更改數據庫),您不應該通過schema.rb進行操作,而是需要進行遷移。 您應該在mysql上為布爾值設置默認值(因為否則它是三態而不是二進制(true,false,null)。
如果您認為問題是默認值是錯誤的,則可以執行change_column遷移,可以從命令行工具生成遷移:
rails g migration UpdateTableName
打開遷移文件(在models / db / migrate / timestamp_update_table_name.rb中),並將代碼更改為:
def change
update_column :table_name, :columnname, :boolean, :default => false
end
然后通過命令行工具運行此命令:
rake db:migrate
如果你認為你的問題的形式,你總是可以看到像這樣看它是否是問題為表單中的值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.