मैं इस त्रुटि संदेश मिल रहा साथ एक बहुरूपी संघ का परीक्षण:यूनिट जुड़नार
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>'
यह लाइन @posts = @user.character.posts.paginate(page: params[:page])
में UsersController में character
लगता नहीं के बराबर है। उपयोगकर्ताओं और पात्रों के बीच एक बहुलक संबंध है। मैंने सोचा कि मैं जुड़नार में सही सिंटैक्स का इस्तेमाल किया था रेल उपयोगकर्ता Bazley एक दृढ़ है कि बताने के लिए: characters.yml में:
character_bazley:
sociable: bazley (user)
मैं कैसे रेल कि उपयोगकर्ता स्थिरता वास्तव में एक चरित्र संबंधित है समझाने करना इसके लिए?
परीक्षा/एकीकरण/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: [email protected]
callsign: bazley
password_digest: <%= User.digest('password') %>
admin: true
activated: true
activated_at: <%= Time.zone.now %>
characters.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
ओह प्रिय, बड़े अक्षर ... मैं एक लक्कड़ हूँ। धन्यवाद। – Bazley