无法为Delayed :: Backend大量分配受保护的属性:ActiveRecord :: Job:priority queue,payload_object

Tux*_*son 1 ruby activerecord ruby-on-rails omniauth

我正在将我的应用程序迁移到4.1并遇到此错误的一些麻烦:

Failure/Error: get :facebook
 ActiveModel::MassAssignmentSecurity::Error:
   Can't mass-assign protected attributes for Delayed::Backend::ActiveRecord::Job: priority, queue, payload_object
 # ./app/models/user.rb:457:in `subscribe_to_mailchimp'
 # ./app/controllers/users/omniauth_callbacks_controller.rb:14:in `facebook'
 # ./config/initializers/log_formatter.rb:22:in `block (2 levels) in <top (required)>'
 # ./config/initializers/log_formatter.rb:21:in `block in <top (required)>'
 # ./spec/controllers/users/omniauth_callbacks_controller_spec.rb:23:in `block (3 levels) in <top (required)>'
Run Code Online (Sandbox Code Playgroud)

规格:

describe Users::OmniauthCallbacksController, ci: true do
  describe "when authenticating" do
    let(:user) do
      Fabricate(:user) 
    end
    let(:social_media_account) do
      Fabricate(:social_media_account, uid: "12345", provider: "facebook", user: user) 
    end

    before do
      term = Fabricate(:term, name: "application")
      user.terms << term
      Fabricate(:project)
    end

    it "redirects to cookied URL" do
      @request.env["devise.mapping"] = Devise.mappings[:user]
      @request.env["omniauth.params"] = {'state' => "google.com"}
      allow(controller).to receive(:find_social_media_account) {true}
      controller.instance_variable_set(:@social_media_account, social_media_account)
      get :facebook
      expect(controller).to redirect_to("google.com")
    end

  end
end
Run Code Online (Sandbox Code Playgroud)

User.rb:347:

def subscribe_to_mailchimp
  if confirmed_at_changed? && self.confirmed?
    Delayed::Job.enqueue UserMailchimpWorker.new(self.id)
  end
end
Run Code Online (Sandbox Code Playgroud)

OmniauthCallbacksController.rb:14:

def facebook
  if @social_media_account
    @user = @social_media_account.user
    if @user
      remember_me(@user)
      set_avatar_from_facebook unless @user.has_third_party_avatar?
      flash[:notice] = I18n.t "devise.omniauth_callbacks.success", :kind => 'Facebook'
      login_and_redirect_back
    else
      setup_user_from_oauth
    end
  elsif current_user
    @user = current_user
    remember_me(@user)
    set_avatar_from_facebook unless @user.has_third_party_avatar?
    current_user.social_media_accounts.create!(attributes_for_social_media_account)
    flash[:notice] = I18n.t "devise.omniauth_callbacks.success", :kind => 'Facebook'
    redirect_back_or_default(root_path)
  else
    setup_user_from_oauth
  end
end
Run Code Online (Sandbox Code Playgroud)

这与strong_params有关吗?有人可以帮我解决这个问题吗?

Tux*_*son 6

我将"protected_attributes"gem移到了"delayed_job_active_record"gem之上,它解决了这个问题.