gpt4 book ai didi

ruby-on-rails - 用 fixture 对多态关联进行单元测试

转载 作者:行者123 更新时间:2023-12-04 06:18:11 24 4
gpt4 key购买 nike

我收到此错误消息:

ERROR["test_profile_display", UsersProfileTest, 2.569931] test_profile_display#UsersProfileTest (2.57s)
NoMethodError: NoMethodError: undefined method `posts' for nil:NilClass
app/controllers/users_controller.rb:14:in `show'
test/integration/users_profile_test.rb:22:in `block in <class:UsersProfileTest>'
app/controllers/users_controller.rb:14:in `show'
test/integration/users_profile_test.rb:22:in `block in <class:UsersProfileTest>'

character行的UsersController中, @posts = @user.character.posts.paginate(page: params[:page])似乎为nil。用户和角色之间存在多态关系。我以为我在灯具中使用了正确的语法来告诉Rails用户Bazley有灯具:
在character.yml中:
character_bazley:
sociable: bazley (user)

我如何说服Rails用户装置确实具有属于它的字符?

测试/集成/users_profile_test.rb:
require 'test_helper'

class UsersProfileTest < ActionDispatch::IntegrationTest
include ApplicationHelper

def setup
@user = users(:bazley)
end

test "profile display" do
log_in_as(@user)
get user_path(@user)
assert_template 'users/show'
assert_select 'title', full_title(@user.name)
assert_select 'h1', text: @user.name
assert_select 'h1>img.gravatar'
assert_match @user.character.posts.count.to_s, response.body
assert_select 'div.pagination'
@user.character.posts.paginate(page: 1).each do |post|
assert_match post.content, response.body
end
end
end # UsersProfileTest

user.rb:
class User < ActiveRecord::Base

attr_accessor :remember_token, :activation_token, :reset_token
has_one :character, as: :sociable, dependent: :destroy
.
.
end

character.rb:
class Character < ActiveRecord::Base

belongs_to :sociable, polymorphic: true
has_many :posts, dependent: :destroy
validates :sociable_id, presence: true
end # Character

users.yml:
bazley:
name: Bazley
email: bazley@oxdorf.com
callsign: bazley
password_digest: <%= User.digest('password') %>
admin: true
activated: true
activated_at: <%= Time.zone.now %>

character.yml:
character_bazley:
sociable: bazley (user)

在UsersController中:
def show
@user = User.find_by_callsign(params[:callsign])
@posts = @user.character.posts.paginate(page: params[:page]) # the line causing the error
@page_name = "user_page"
redirect_to root_url and return unless @user.activated
end

最佳答案

characters.yml更改为

character_bazley:
sociable: bazley (User)

代替
character_bazley:
sociable: bazley (user)

请注意,它是 User而不是 user。此处 User使用的关键字将告诉您 sociable_typeUser类。

引用:

http://ruby-journal.com/rails/define-fixtures-with-polymorphic-association/
http://api.rubyonrails.org/v3.2.8/classes/ActiveRecord/Fixtures.html#label-Polymorphic+belongs_to

关于ruby-on-rails - 用 fixture 对多态关联进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27744713/

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