Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 友好的_id gem及其对测试的影响(无slug)_Ruby On Rails_Ruby_Ruby On Rails 4_Testing_Friendly Id - Fatal编程技术网

Ruby on rails 友好的_id gem及其对测试的影响(无slug)

Ruby on rails 友好的_id gem及其对测试的影响(无slug),ruby-on-rails,ruby,ruby-on-rails-4,testing,friendly-id,Ruby On Rails,Ruby,Ruby On Rails 4,Testing,Friendly Id,我通过在用户模型中添加以下内容实现了友好的\u id gem: include FriendlyId friendly_id :username 在控制器中,我添加了将User.find(params[:id])替换为User.friendly.find(params[:id]): 所以我没有用Slug 问题:现在各种测试突然失败。下面是一个例子。我按照建议将.to_param添加到,但这并没有更改错误消息: class AvatarUploadTest < ActionDispatch

我通过在用户模型中添加以下内容实现了友好的\u id gem:

include FriendlyId
friendly_id :username
在控制器中,我添加了将
User.find(params[:id])
替换为
User.friendly.find(params[:id])

所以我没有用Slug

问题:现在各种测试突然失败。下面是一个例子。我按照建议将.to_param添加到,但这并没有更改错误消息:

class AvatarUploadTest < ActionDispatch::IntegrationTest
  def setup
    @admin             = users(:michael)
  end

  test "avatar upload" do
    log_in_as("user", @admin.to_param)    # Helper method that logs in.
    get user_path(@admin)                 # Line 16
    ...etc
ERROR["test_avatar_upload", AvatarUploadTest, 2015-04-14 13:46:57 +0000]
 test_avatar_upload#AvatarUploadTest (1429019217.17s)
ActiveRecord::RecordNotFound:         ActiveRecord::RecordNotFound: ActiveRecord::RecordNotFound
            app/controllers/users_controller.rb:21:in `show'
            test/integration/avatar_upload_test.rb:16:in `block in <class:AvatarUploadTest>'
        app/controllers/users_controller.rb:21:in `show'
        test/integration/avatar_upload_test.rb:16:in `block in <class:AvatarUploadTest>'
错误消息:

class AvatarUploadTest < ActionDispatch::IntegrationTest
  def setup
    @admin             = users(:michael)
  end

  test "avatar upload" do
    log_in_as("user", @admin.to_param)    # Helper method that logs in.
    get user_path(@admin)                 # Line 16
    ...etc
ERROR["test_avatar_upload", AvatarUploadTest, 2015-04-14 13:46:57 +0000]
 test_avatar_upload#AvatarUploadTest (1429019217.17s)
ActiveRecord::RecordNotFound:         ActiveRecord::RecordNotFound: ActiveRecord::RecordNotFound
            app/controllers/users_controller.rb:21:in `show'
            test/integration/avatar_upload_test.rb:16:in `block in <class:AvatarUploadTest>'
        app/controllers/users_controller.rb:21:in `show'
        test/integration/avatar_upload_test.rb:16:in `block in <class:AvatarUploadTest>'
错误[“测试头像上传”,头像测试,2015-04-14 13:46:57+0000]
测试化身上传化身测试(1429019217.17s)
ActiveRecord::RecordNotFound:ActiveRecord::RecordNotFound:ActiveRecord::RecordNotFound
app/controllers/users\u controller.rb:21:in'show'
测试/集成/头像上传测试.rb:16:in'block in'
app/controllers/users\u controller.rb:21:in'show'
测试/集成/头像上传测试.rb:16:in'block in'

这与
friendly\u id
gem有什么关系?我真的不明白,也不知道我需要对我的测试做些什么调整。

很抱歉,我一开始误解了你的问题,没有意识到你已经将你的控制器改为使用
用户友好的。查找
-这是不寻常的,因为通常你想对这些URL使用友好的id

因此,由于您仍在使用原始
id
,因此您需要在测试中提供该id,即,您需要输入:

get user_path(@admin.id)

如果您只提供了
@admin
,Rails将调用
.to_param
,这将是友好的ID,如果您提供了:
User.find(params[:ID])
,但是在您转换为
User.friendly.find(params[:ID])之后,将不会找到谢谢。我还是在同一条线上犯了同样的错误。我是否也应该更改此测试使用的测试助手?我在原来的帖子中添加了测试助手。所以,我的答案并没有解决您在问题中报告的错误?例如,
get user\u path(@admin)
行失败,出现错误消息
ActiveRecord::RecordNotFound
否,它确实在同一行上给出了相同的错误消息。对不起,我的错误,我没有注意到你说你改为使用
。friend.find
-让我删除我的答案,这是错误的。好的,在完全理解您所做的操作后,我编辑并取消删除了我的答案。粘贴完整的错误消息,并显示触发错误的完整控制器。我添加了信息,并按照建议将
。添加到测试代码的\u param