ArgumentError: неверное количество аргументов (задано 1, ожидается 2) для метода Update_Attribute - PullRequest
0 голосов
/ 20 января 2019

Я создаю приложение для повторяющихся событий, в котором определенные пользователи (стримеры) могут планировать повторяющиеся еженедельные события (потоки), а другие пользователи (зрители) могут следить за ними. Результатом является персонализированный еженедельный календарь, детализирующий, когда все последующие события стримеров начинаются и заканчиваются.

enter image description here

Однако, поскольку зрители могут следить за бесконечным числом стримеров, и, следовательно, полученный календарь будет выглядеть как горячий беспорядок. Поэтому я добавил логический атрибут в таблицу отношений, который указывает, были ли эти отношения предпочтительнее.

  create_table "relationships", force: :cascade do |t|
    t.integer "follower_id"
    t.integer "followed_id"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.boolean "favorited", default: false
    t.index ["followed_id"], name: "index_relationships_on_followed_id"
    t.index ["follower_id", "followed_id"], name: "index_relationships_on_follower_id_and_followed_id", unique: true
    t.index ["follower_id"], name: "index_relationships_on_follower_id"
  end

Таким образом, у зрителей будет второй персонализированный календарь, в котором будут отображаться только события избранных стримеров.

У меня уже есть метод отслеживания и отмены подписки, который успешно создает и уничтожает отношения между зрителем и стримером, но у меня возникают проблемы с успешным обновлением существующих отношений с избранных на избранные.

test "should favorite and unfavorite a streamer" do
    yennifer = users(:yennifer)
    cirilla = users(:cirilla)
    yennifer.follow(cirilla)
    yennifer.favorite(cirilla)     #user_test.rb:151
end

Пакет тестирования возвращает следующую ошибку, и я не могу понять, что это за отсутствующий аргумент.

["test_should_favorite_and_unfavorite_a_streamer", #<Minitest::Reporters::Suite:0x0000000006125da8 @name="UserTest">, 0.16871719993650913]
 test_should_favorite_and_unfavorite_a_streamer#UserTest (0.17s)
ArgumentError:         ArgumentError: wrong number of arguments (given 1, expected 2)
            app/models/relationship.rb:11:in `favorite'
            app/models/user.rb:124:in `favorite'
            test/models/user_test.rb:151:in `block in <class:UserTest>'

  27/27: [=================================] 100% Time: 00:00:01, Time: 00:00:01

Finished in 1.82473s
27 tests, 71 assertions, 0 failures, 1 errors, 0 skips

User.rb

# Follows a user
def follow(other_user)
    active_relationships.create(followed_id: other_user.id)
end

# Unfollows a user
def unfollow(other_user)
    active_relationships.find_by(followed_id: other_user.id).destroy
end

def favorite(other_user)
    active_relationships.find_by(followed_id: other_user.id).favorite     #user.rb:124
end

def unfavorite(other_user)
    active_relationships.find_by(followed_id: other_user.id).unfavorite
end

Relationships.rb

def favorite
    update_attribute(favorited: true)     #relationship.rb:11
end

def unfavorite
    update_attribute(favorited: false)
end

Может кто-нибудь помочь мне определить недостающий аргумент и решить эту проблему. Спасибо.

1 Ответ

0 голосов
/ 20 января 2019

Первый комментарий к этому ответу правильный, поэтому я не знаю, почему этот человек разместил комментарий, а не ответ.update_attribute принимает два аргумента, и вы передаете ему один аргумент хеша.Ваш "любимый" метод эквивалентен update_attribute({favorited: true}), когда вы действительно хотите update_attribute(:favorited, true)

...