كيفية تعيين القيمة في كائن ROR؟
-
23-09-2019 - |
سؤال
لدي كائن طلب ، والذي يحتوي على طريقة إنشاء مثل هذه:
def create
@order = Order.new(params[:order])
# @order.status_id = "1"
respond_to do |format|
if @order.save
flash[:notice] = 'Order was successfully created.'
format.html { redirect_to(@order) }
format.xml { render :xml => @order, :status => :created, :location => @order }
else
format.html { render :action => "new" }
format.xml { render :xml => @order.errors, :status => :unprocessable_entity }
end
end
end
أرغب في تعيين @order status_id على "1" ، لذلك لدي
@order.status_id = "1"
لكن هذا الرمز لا يعمل ، بعد أن أقوم بإلغاء تحديده ، لا يزال من الممكن حفظ "1" في الحالة في DB ، ولكن يمكن لتخزين السمات الأخرى بنجاح.
order.rb
class Order < ActiveRecord::Base
has_many :order_items
belongs_to :status
end
المحلول
يجب أن تكون قادرًا على تعيين قيمة سلسلة لمفتاح العلاقة وسيتم تحويلها كما هو مطلوب. تأتي المعاملات دائمًا كخيوط ، لذلك من الواضح أن هذا يجب أن يحدث لأي شيء يعمل.
هذا هو نوع الموقف الذي سيساعد فيه اختبار الوحدة القوي على تضييق نطاق المشكلة. قد يكون واحد من:
- هناك attr_accessor محدد لـ status_id الذي يحظر المهمة.
- هناك status_id = method محدد الذي يحظر المهمة.
- يتم إعادة تعيين status_id أثناء A قبل _validation أو قبل _Save Call.
تريد إنشاء روتين اختبار يتحقق من هذا: يعمل:
def test_status_assignment
order = Order.new
order.status_id = '1'
order.save
assert_equal 1, order.status_id
end
نصائح أخرى
يمكن أن يكون attr_accessible
في النموذج الخاص بك يمنعك من التعيين إلى هذا الحقل. يفعل هذا باستخدام القائمة البيضاء من الحقول المعتمدة.
يتغيرون @order.status_id = "1"
ل @order.status_id = 1
قد يقرأ روبي "1"
كسلسلة (من المفترض أن تفعل) بدلاً من عدد صحيح (ما تبحث عنه على الأرجح). عندما تقوم بإزالة عروض الأسعار ، فإن روبي سوف يفسرها على أنها عدد صحيح. إذا كان عليك تركها كسلسلة ، فحاول شيئًا مثل my_string.to_i
أو "123".to_i
.
إذا لم ينجح هذا ، فيرجى نشر أي رسالة خطأ تتلقاها.
هذه
@order.status_id = "1"
يجب ان يكون
@order.status_id = 1
أو ربما
@order.status = Status.find_by_id(1)
إذا كان لديك علاقات تم إعدادها بشكل جيد