Envanter yönetimi için bir Rails frontend yazıyorum. Kullanıcıların ürünlerini kayıt edebilmek istiyorum, bu yüzden vardır:Raylar opsiyonel belongs_to
class User < ActiveRecord::Base
has_many :products
# <snip>
end
ve
class Product < ActiveRecord::Base
belongs_to :user
# <snip>
end
sorun ürünleri önce bir kullanıcı tarafından tescil edilen oluşturulan olmasıdır. Yani, Product.create
'u aramak ve user_id
'u nil
'a ayarlamanız kesinlikle kabul edilebilir. Tahmin edebileceğiniz gibi olsa da, Raylar kutunun dışında bu desteklemez: Ben en çekici olan kludgey geçici çözümler, bir demet düşündüm
> 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!'
bir NullUser
sınıflara User
ve kullanımı için ürünler yaratmak için. Ama bu hala bir kesmek gibi görünüyor. Bu Rails Yolu nedir?
Teşekkürler.
ilgili göç:
class AddUseridToProducts < ActiveRecord::Migration
def change
add_column :products, :user_id, :integer
end
end
ve üstü:
class Changeuseridtobeoptionalforproducts < ActiveRecord::Migration
def change
change_column :products, :user_id, :integer, null: true
end
end
Lütfen "Ürün" modelinde sahip olduğunuz tüm doğrulamaları gönderin. –