В настоящее время я изучаю Ruby on Rails on Rails Tutorial. Когда я тестировал рельсы, я столкнулся с этой ошибкой.
ArgumentError: wrong number of arguments (given 2, expected 1)
app/models/user.rb:35:in `authenticated?'
app/controllers/account_activations_controller.rb:4:in `edit'
test/integration/users_signup_test.rb:35:in `block in <class:UsersSignupTest>'
def authenticated?(remember_token)
return false if remember_digest.nil?
BCrypt::Password.new(self.remember_digest).is_password?(remember_token)
end
def edit
user = User.find_by(email: params[:email])
if user && !user.activated? && user.authenticated?(:activation, params[:id])
user.update_attribute(:activated, true)
user.update_attribute(:activated_at, Time.zone.now)
log_in user
flash[:success] = "Account activated!"
redirect_to user
else
flash[:danger] = "Invalid activation link"
redirect_to root_url
end
test "valid signup information with account activation" do
get signup_path
assert_difference 'User.count', 1 do
post users_path, params: { user: { name: "Example User",
email: "[email protected]",
password: "password",
password_confirmation: "password" } }
end
assert_equal 1, ActionMailer::Base.deliveries.size
user = assigns(:user)
assert_not user.activated?
log_in_as(user)
assert_not is_logged_in?
get edit_account_activation_path("invalid token", email: user.email)
assert_not is_logged_in?
get edit_account_activation_path(user.activation_token, email: 'wrong')
assert_not is_logged_in?
get edit_account_activation_path(user.activation_token, email: user.email)
assert user.reload.activated?
follow_redirect!
assert_template 'users/show'
assert is_logged_in?
end
end
Не могли бы вы дать мне совет, чтобы решить эту проблему?
Я нахожусь в главе 11. В моем коде отсутствует что-то, связанное с запоминанием токена?
Вы в конце главы? Если да, перечитайте его с самого начала и измените свой код в соответствии с изменениями в руководстве. Изменения в 11.3.1, так что если вы где-то до этого - просто забыли про сломанные тесты и двигайтесь дальше, все будет хорошо :)





Похоже, вы дали дополнительный параметр методу authenticated? во второй строке app/controllers/account_activations_controller.rb#edit.
Удалите его, и это должно сработать.
Я изменил user.update_attribute(:activated, true) user.update_attribute(:activated_at, Time.zone.now) на user.activate, но все равно появилась та же ошибка.
@ 五十嵐伸雄 Поскольку вы создали метод authenticated? в пользовательской модели с одним параметром и отправляете два параметра, это и вызывает ошибку. когда я сказал удалить это, я имел в виду это изменение user.authenticated?(:activation, params[:id]) => user.authenticated?(:activation)
Теперь вы находитесь в том месте, где это не должно работать. «В приведенном выше коде используется метод authentication?, чтобы проверить, соответствует ли дайджест активации учетной записи заданному токену, но в настоящее время это не будет работать, поскольку этот метод специализирован для запоминающего токена». Пройдите дальше по учебнику, и вы исправите код и увидите цикл «красный-зеленый-рефакторинг».