我更新了项目的Ruby和Rails版本。
红宝石2.2.3
–>2.5.1
导轨4.1.8
–>5.1.7
当我尝试注册新用户时,出现错误:
ArgumentError (wrong number of arguments (given 2, expected 0..1)):
app/controllers/users/registrations_controller.rb:41:in `create'
这既发生在客户端(前端(也发生在 Rails 控制台。
registrations_controller.rb:
39: def create
40: build_resource(sign_up_params)
41: resource_saved = resource.save
42:
43: yield resource if block_given?
44:
45: if resource_saved
46: if resource.active_for_authentication?
...
在 Rails 控制台中:
user = User.new(email: "qwe@test.com", name: "qwe qwe", password: '123123123')
=> #<User id: nil, email: "qwe32@q.com", created_at: nil...
user.save!
ROLLBACK
Traceback (most recent call last):
1: from (irb):4
ArgumentError (wrong number of arguments (given 2, expected 0..1))
用户型号:
class User < ActiveRecord::Base
extend FriendlyId
include InstantSearch
include PushNotificationToFollowers
include CarrierWave::MiniMagick
serialize :site_link, Array
serialize :followers_ids, Array
acts_as_token_authenticatable
acts_as_follower
acts_as_followable
acts_as_liker
acts_as_likeable
attr_accessor :site_link_raw
mount_uploader :avatar, AvatarUploader
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable, :omniauthable,
omniauth_providers: [:facebook, :google_oauth2]
validates :name, presence: true
validates :slug, uniqueness: true
validates_format_of :slug, with: /Ad+[a-zA-Z]+S*z|A[^sd]S*z/i, message: 'minimum one letter, without spaces', on: :update
friendly_id :slug_candidates, use: [:slugged, :finders]
{some associations}
before_create :check_slug
after_create :set_membership
after_create :send_welcome_email
after_create :set_settings
ransacker :id,
formatter: ->(bool) {
users_ids = SoundUploader.select(:user_id).where(active:true)
if bool == 'true'
users_ids.present? ? where("users.id IN (#{users_ids.to_sql})").map(&:id) : nil
else
where("users.id NOT IN (#{users_ids.to_sql})").map(&:id)
end
} do |user|
user.table[:id]
end
def check_slug
unless self.slug.match(/Ad+[a-zA-Z]+S*z|A[^sd]S*z/i)
new_slug = "project-#{self.slug}"
user = User.find_by(slug: new_slug)
new_slug = "#{new_slug}-#{DateTime.current.to_i}" if user
self.slug = new_slug
end
end
def set_membership
self.memberships.create
end
def send_welcome_email
UserMailer.welcome_email(self.id).deliver
end
def set_settings
self.create_setting
end
对于其他型号,我没有收到此错误。
但是对于用户模型,无论我如何调用save
方法,此错误总是会出现。
在 Rails 4.x 中,Active Record 模型继承自
ActiveRecord::Base
。 在 Rails 5.x 中,所有模型都继承自ApplicationRecord
。
ApplicationRecord
是适用于所有应用模型的新超类,类似于 应用控制器子类化ApplicationController
而不是ActionController::Base
.这为应用提供了单一的配置位置 应用范围的模型行为。从 Rails4.x 升级到 Rails 5.x 时,您需要创建一个 在应用程序/模型/中application_record.rb文件,并添加以下内容 内容:
class ApplicationRecord < ActiveRecord::Base self.abstract_class = true end
然后确保所有模型都继承自它。
我创建了一个新的应用程序/模型/application_record.rb文件,其中包含以下内容:
class ApplicationRecord < ActiveRecord::Base
self.abstract_class = true
end
并如@mechnicov指出的那样更改了用户模型。
从:
class User < ActiveRecord::Base
...
end
自:
class User < ApplicationRecord
...
end