首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails教程第11章错误"uninitialized constant User::Relationships“

Rails教程第11章错误"uninitialized constant User::Relationships“
EN

Stack Overflow用户
提问于 2013-02-07 12:19:25
回答 1查看 1.4K关注 0票数 3

我一直收到错误消息

代码语言:javascript
复制
   uninitialized constant User::Relationships

在学习rails教程的第11章时。

以下是我在浏览器中登录时试图访问主页时出现的完整错误。

代码语言:javascript
复制
    Extracted source (around line #11):

8:          </a>
9:          <a href="<%= followers_user_path(@user) %>">
10:         <strong id="followers" class="stat">
11:             <%= @user.followers.count %>
12:         </strong>
13:         followers
14:     </a>

我已经多次阅读了这一章,并检查了每一行代码,但有时您的眼睛会欺骗您,所以下面是其余的代码

users.rb

代码语言:javascript
复制
class User < ActiveRecord::Base
attr_accessible :email, :name, :password, :password_confirmation
has_secure_password

has_many :microposts, dependent: :destroy 
has_many :relationships, foreign_key: "follower_id", dependent: :destroy
has_many :followed_users, through: :relationships, source: :followed 
has_many :reverse_relationships, foreign_key: "followed_id",
                               class_name: "Relationships",
                               dependent:   :destroy
has_many :followers, through: :reverse_relationships, source: :follower

before_save { |user| user.email = email.downcase}
before_save :create_remember_token

validates :name, presence:true, length: { maximum: 50 }

VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
validates :email, presence: true, format: { with: VALID_EMAIL_REGEX},
                uniqueness: { case_sensitive: false }
validates :password, presence: true, length: { minimum: 6}
validates :password_confirmation, presence: true

def feed
  Micropost.where("user_id =?", id)
end

def following?(other_user)
  relationships.find_by_followed_id(other_user.id)
end

def follow!(other_user)
  relationships.create!(followed_id: other_user.id)
end

def unfollow!(other_user)
  relationships.find_by_followed_id(other_user.id).destroy
end

private
  def create_remember_token
    self.remember_token = SecureRandom.urlsafe_base64
  end

end

这是类本身

代码语言:javascript
复制
class Relationship < ActiveRecord::Base
  attr_accessible :followed_id
  belongs_to :follower, class_name: "User"
  belongs_to :followed, class_name: "User"

  validates :follower_id, presence: true
  validates :followed_id, presence: true
end

这就是本教程中的内容。为了以防万一,我又添加了:follower_id,但它仍然不起作用。

我还构建了一个relationship_controller。

代码语言:javascript
复制
class RelationshipsController < ApplicationController
before_filter :signed_in_user

def create
  @user = User.find(params[:relationship][:follower_id])
  current_user.follow!(@user)
  respond_to do |format|
    format.html { redirect_to @user }
    format.js
  end
end

def destroy
  @user = Relationship.find(params[:id]).followed
  current_user.unfollow!(@user)
  respond_to do |format|
    format.html { redirect_to @user }
    fromat.js
  end
end

结束

在路线上。

代码语言:javascript
复制
 resources :users do
   member do
     get :following, :followers
   end
 end

发生错误的页面如下所示:

代码语言:javascript
复制
<% @user ||= current_user %>
<div class = "stats">
<a href ="<%= following_user_path(@user)%>">
    <strong id="following" class="stat">
        <%= @user.followed_users.count %>
    </strong>
    following
</a>
<a href="<%= followers_user_path(@user) %>">
    <strong id="followers" class="stat">
        <%= @user.followers.count %>
    </strong>
    followers
</a>
</div>

当我删除第二个代码块之前的第一部分代码时,代码的第一部分工作得很好。这只是因为某些原因,“追随者”关系没有建立起来。我在控制台中使用它,但它不能调用,而user.followed_users可以工作。我已经玩了四个小时了,我把桌子弄掉了,然后重建了它,但我不能让它工作。

我之前尝试过查看堆栈溢出,发现如下所示:

Ruby error (uninitialized constant User::Relationship)

但那里的解决方案都没有起到作用。谢谢你的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-07 12:49:37

你有一个打字错误:

代码语言:javascript
复制
has_many :reverse_relationships, foreign_key: "followed_id",
                                 class_name: "Relationships",

将最后一位更改为class_name: "Relationship"

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14743478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档