私は在庫管理のためにRailsフロントエンドを書いています。私は、ユーザーが製品を登録することができるようにしたいので、私は持っている:オプションのレールはありませんbelongs_to
class User < ActiveRecord::Base
has_many :products
# <snip>
end
と
class Product < ActiveRecord::Base
belongs_to :user
# <snip>
end
問題は、製品が前にユーザが登録されることに作成されていることです。つまり、Product.create
に電話し、user_id
をnil
に設定するだけで十分です。あなたが想像できるように、しかし、Railsは箱から出して、これをサポートしていません:
> Product.create!
(0.3ms) SELECT COUNT(*) FROM "products" WHERE "products"."type" IN ('Product')
(0.1ms) begin transaction
(0.1ms) rollback transaction
ActiveRecord::RecordInvalid: Validation failed: User can't be blank
from ~/.rvm/gems/ruby-2.0.0-p0/gems/activerecord-3.2.13/lib/active_record/validations.rb:56:in `save!'
私はNullUser
サブクラスUser
と用途を持つことである最も魅力的なそのkludgey回避策の束、について考えてきました製品を作ることですしかし、それはまだハックのように思えます。これでRails Wayとは何ですか?
ありがとうございました。
関連の移行:
class AddUseridToProducts < ActiveRecord::Migration
def change
add_column :products, :user_id, :integer
end
end
以降:
class Changeuseridtobeoptionalforproducts < ActiveRecord::Migration
def change
change_column :products, :user_id, :integer, null: true
end
end
'Product'モデルにあるすべてのバリデーションを投稿してください。 –