gpt4 book ai didi

ruby-on-rails - 在 Rails 中测试多态关联

转载 作者:数据小太阳 更新时间:2023-10-29 09:00:59 24 4
gpt4 key购买 nike

我正在为我的 Rails 应用程序中的图像更新编写测试。我的应用程序中的图片模型是一个多态关联,它属于多个模型。我正在测试集成测试中的创建、更新和销毁操作工作流。我已经成功测试了创建操作。它工作正常。我遇到的问题是更新操作。

下面给出图片模型的模型关联。

class Picture < ActiveRecord::Base
belongs_to :pictureable, polymorphic: true

# each user has one picture
has_one :picture, as: :pictureable

#each scoreboard has one picture
has_one :picture, as: :pictureable, dependent: :destroy

picture_update_test 的代码如下。

def setup 
@picture = pictures(:picture_a) #this is the picture associated with pictureable (scoreboard_a)
@scoreboard = scoreboards(:scoreboard_a) #pictureable is scoreboard_a
end

test "successful update where pictureable is scorebaord" do
patch scoreboard_picture_path(@scoreboard, @picture), picture: {picture: "blank-prof.jpg"}
end

picture.yml文件中的代码如下。

picture_a:
picture: "blank-prof.jpg"
pictureable_type: scoreboard

运行测试后,出现以下错误。

NoMethodError: undefined method `update_attributes' for nil:NilClass
app/controllers/pictures_controller.rb:19:in `update'

图片 Controller 代码也如下。

def update
@picture = @pictureable.picture
if @picture.update_attributes(picture_params)
redirect_to @pictureable
flash[:success] = "Picture updated successfully"
else
redirect_to @pictureable
flash[:danger] = "An error occured, please try again!"
end
end

我通过拆分 url 来确定 @pictureable 是用户还是记分牌。代码如下。

def load_pictureable
resource, id = request.path.split('/')[1,2]
@pictureable = resource.singularize.classify.constantize.find(id)
end

我为该方法运行了一个 before_filter。 before_filter :load_pictureable.

在测试中,我不需要拆分任何 url。我特别说明了 url 路径,scoreboard_picture_path 或“user_picture_path”。我只需要传递 scoreboard_id 和 picture.id。错误状态为 nil 类的 update_attributes。我真的不确定为什么会收到此错误。我不确定 pictures.yml 文件在关联方面是否正确。一如既往,任何帮助将不胜感激。谢谢!!

最佳答案

在您的 yaml 中,您设置的是 pictureable_type 而不是 pictureable_id,因此未正确构建关联。

您可以 see the fixtures docs有关设置多态关联固定装置的示例,但基本上您应该能够执行以下操作,而不是您正在做的事情:

picture_a:
picture: "blank-prof.jpg"
pictureable: scoreboard_a (Scoreboard)

然后应该允许 @pictureable.picture 返回图片。

关于ruby-on-rails - 在 Rails 中测试多态关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35801924/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com