簡體   English   中英

ruby on rails中的schema.rb和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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM