मैं सूची प्रबंधन के लिए एक रेल फ्रंटेंस लिख रहा हूं। मैं उन उत्पादों को पंजीकृत करने में सक्षम होना चाहते हैं, तो मेरे पास है:रेल वैकल्पिक वैकल्पिक हैं
class User < ActiveRecord::Base
has_many :products
# <snip>
end
और
class Product < ActiveRecord::Base
belongs_to :user
# <snip>
end
समस्या यह है कि उत्पादों के लिए पहले एक उपयोगकर्ता द्वारा पंजीकृत किया जा रहा बनाई गई हैं है। यही है, Product.create
पर कॉल करना पूरी तरह स्वीकार्य है और बस इसे user_id
पर nil
पर सेट करें। आप कल्पना कर सकते हैं, हालांकि, रेल इस बॉक्स से बाहर का समर्थन नहीं करता:
> 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!'
मैं kludgey समाधान है, जिनमें से सबसे आकर्षक का एक समूह के बारे में सोचा है एक NullUser
उपवर्गीकरण User
और उपयोग करने के लिए उत्पादों को बनाने के लिए। लेकिन वह अभी भी एक हैक की तरह लगता है। इसके साथ रेलवे रास्ता क्या है?
धन्यवाद।
प्रासंगिक माइग्रेशन:
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
कृपया, 'उत्पाद' मॉडल पर आपके सभी सत्यापन पोस्ट करें। –