0

Rails の Users テーブルに 2 つの新しい列を追加したところ、ローカル環境と比べて Heroku で驚くべき結果が得られました。また、以前の Heroku の使用状況と比較した場合でも、驚くべき結果が得られました。何が起こったのか知っていますか?

これは移行です:

class AddMoreIntroFlagsToUsers < ActiveRecord::Migration def change add_column :users, :has_seen_first_intro, :boolean, :null => false, :default => false add_column :users, :has_seen_store_intro, :boolean, :null => false, :default =>偽りの終わり

ただし、私のビューの次の JavaScript は、true と false の代わりに t と f を出力します...

User.hasSeenStoreIntro = <%= signed_in? および current_user.has_seen_store_intro %>

に変換します: (私は t や f ではなく true または false を期待していました!)

User.hasSeenStoreIntro = t

t が定義されていないため、これにより JS エラーが発生します。

新しい列だけでこれが起こる理由は何ですか? 私の古いコラムでは決してそれをしませんでした。関連する可能性のある問題は、ユーザーを設定するために安全なルートを実行したことです。既存のすべてのユーザーに対して has_seen_first_intro = true および user.has_seen_store_intro = true でしたが、これらの列は true に更新されませんでした。以前の列を追加した後に同様のコードを実行しましたが、以前は機能していました。今何が変わった?

唯一変わったと思うのは、ここ数日で実稼働テーブルのユーザー数が大幅に増加したことです。

4

3 に答える 3

1

IIRC Rails の SQLite アダプターは、デフォルトでブール値を t/f に設定します

DBに依存しないようにするには、Railsのブールフィールドの自動評価を使用してみてください

signed_in? and current_user.has_seen_store_intro?

編集:それが機能しない可能性がある場合、この投稿に従って解決策を試してください

于 2013-02-20T09:26:35.183 に答える
0

't'の真の値としてデータベースに保存した可能性があります。これは、とcurrent_user.has_seen_store_introとして保存されるブール値をサポートする別のデータベースアダプタによって追加されたためと考えられます。それが戻ると仮定しましょう-その場合:'t''f'signed_in?true

1.9.3p194 :008 > a = true
 => true 
1.9.3p194 :009 > b = 't'
 => "t" 
1.9.3p194 :010 > a and b
 => "t"

それはHerokuにあります。開発環境では、データベースアダプタはブール値として理解するため、を返し't'ます。'f'true

ただの可能性。

于 2013-02-20T09:16:07.157 に答える