1

Rails のデータベース データについて質問があります。

空のテーブル列のベスト プラクティスは何ですか?

ユーザー入力が必須ではない一部の列にはデフォルトがありません。

User model
ID | name       | drink_of_choice |  favourite_color
-----------------------------------------------------
1  | Benji      | coffee          |  yellow
2  | Becky      | tea             |  NULL
-----------------------------------------------------

ご覧のとおり、Becky はお気に入りの色をまだ入力していないため、Becky の favouritte_color は NULL です。

Rails 開発者は、空の文字列を保存し、データベースで NULL を回避するためのベスト プラクティスとして :default => '' を設定していますか?

ご辛抱いただきありがとうございます。また、学習を進めるためのアドバイスをいただければ幸いです。

WD

4

3 に答える 3

3

あなたには多くの選択肢があります...

1-最初のものは、ユーザーに何らかのデータを入力させることです。したがって、存在の検証を使用できます。

class User < ActiveRecord::Base
  validates :name, :drink_of_choice, :favourite_color, :presence => true
  ...
end

2- ただし、ユーザーが一部の列を空のままにしておくことを許可したい場合があります。その場合、モデルでデフォルト値を設定できます。たとえば、次のようになります。

class User < ActiveRecord::Base
  before_save :set_favourite_color
  ...
  def set_favourite_color
    self.favourite_color ||= ''
  end
end

3- 次のようにコントローラーで設定することもできます。

def new
  @user = User.new
  @user.favourite_color ||= ''
  ...
end

4- 別のオプションですが、私はあまり好きではありません (まったく柔軟性がありません)。移行ファイルで定義することです。

class CreateUser < ActiveRecord::Migration
  def change
    create_table :users do |t|
      ...
      t.string :favourite_color, default: ''
      ...
      t.timestamps
    end
  end
end

最善のアプローチは何ですか?

Rails のベスト プラクティスに従います。より正確には、Fat Model、Skinny Controller です。私はオプション2を選択します。

編集- 列のデフォルト値を決定する前に、その意味を考えてください。データが入っていないという意味なら、nullのままでいいと思います。Daniel Rikowskiのコメントのおかげで、この質問を見てください。

于 2013-02-20T09:56:07.480 に答える
1

うまくいく場合は、この宝石を試してください:

https://github.com/rubiety/nilify_blanks

これは|| を使用する u-> Ruby/Railsにも役立ちます。nil 値の代わりに空の文字列を使用して値を決定する

于 2013-02-20T09:55:45.017 に答える
0

Railsビューでは、次のようなものを使用します。

<%= input unless input.blank? %>

そして、データはDBにそのまま残します。

于 2013-03-12T17:13:46.330 に答える