سؤال

أحاول معرفة سبب عدم عمل هذا.

دعنا نقول لك ثلاثة نماذج ، المستخدم ، Foo و Bar. من أجل إنشاء شريط ، يجب على المستخدم أولاً إنشاء كائن FOO والتحقق منه أولاً.

Class User #snip!
has_many :foos
has_many :bars

Class Foo #snip!
belongs_to :user
has_many :bars

Class Bar #snip!
belongs_to :user
belongs_to :foo

أحاول الحصول على اختبار وظيفي يعمل حيث إذا حاول المستخدم إنشاء شريط جديد دون الحصول على FOO صالح ، يتم إعادة توجيههم إلى الإجراء "الجديد" لـ FOO.

لم أواجه أي مشكلة في سيناريو إعادة التوجيه. ومع ذلك ، عندما أحاول إعداد مستخدم بكائن FOO صالح ومحاولة الحصول على الإجراء "الجديد" لشريط ما ، لا يزال يتم إعادة توجيهه إلى الإجراء "الجديد" لوحدة التحكم FOO. لا يزال لا يعترف بأن المستخدم لديه FOO.

ها هي وحدة التحكم الخاصة بي:

 class BarsControllerTest < ActionController::TestCase
  setup :activate_authlogic
  def setup
    @request.env['HTTPS'] = nil
    @user = Factory.build(:user)
    @foo = Factory.build(:foo, :user => @user)
  end
   test "should get new when user has a valid foo" do
     @request.env['HTTPS'] = 'on'
     UserSession.create(@user)
     get :new
     assert_response :success
  end

هذه هي وظيفة إعادة التوجيه التي لدي في وحدة تحكم التطبيق الخاصة بي والتي تسمى في وحدة تحكم الشريط الخاصة بي:

  def foo_required
    if current_user && @current_user.foos.valid.empty? && @current_user.foos.empty?
    flash[:notice] = "You must have a verified foo in order to create a Bar!"
    redirect_to new_foo_path
    elsif current_user && @current_user.foos.valid.empty?
    flash[:notice] = "You must verify your foos in order to create a Bar!"
    redirect_to foos_path
    end
 end

ها هو مصنع فو:

Factory.define :foo do |f|
   #attributes
   f.valid true
   f.association :user
end

بدلاً من ذلك ، أحصل على إعادة توجيه إلى "https://test.host:80/foos/new"وحدة التحكم لا تقر بأن المستخدم لديه ...

الجلسة صالحة ، لذا يبدو أن هذه مشكلة في المصنع ، لكنني لست متأكدًا من ماهية.

هل كانت مفيدة؟

المحلول

أفترض أن هذا هو المصنع. انت تتصل Factory.build وهو ما لا يحفظ أي شيء في قاعدة البيانات ، لذلك ليس لديك قيمة المفتاح الخارجي المطلوب لجمعك. تبديل تلك إلى Factory.create ويجب أن ترى فرقا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top