首页 > 解决方案 > 未初始化的常量 Like::ArticleId

问题描述

我正在尝试使用基于教程herehere的rails创建一个简单的博客应用程序。该代码在第一个链接中运行良好,但尝试使用第二个教程向文章添加一个like 按钮我得到一个“未初始化的常量”错误。该错误会从文章模型和文章 show.html.erb 中抛出以下代码。

文章.rb:

    class Article < ActiveRecord::Base
    belongs_to :user
    has_many :likes
    validates :title, presence: true, length: { minimum: 3, maximum: 50 }
    validates :description, presence: true, length: { minimum: 10, maximum: 300 }
    validates :user_id, presence: true
    def liked?(user)
        !!self.likes.find{|like| like.user_id == user.id}
    end
end

显示.html.erb

<h2 align="center">Title: <%= @article.title %></h2>
<div class="well col-xs-8 col-xs-offset-2">
 <% if @article.user %>
 <ul class="listing">
  <div class="row" align="center">
   <div class="col-md-4 col-md-offset-4">
    <li><%= link_to gravatar_for(@article.user), user_path(@article.user) %></li>
    <li class="article-title"><%= link_to @article.user.username, user_path(@article.user) %></li>
    <li><small><%= pluralize(@article.user.articles.count, "article") if @article.user.articles %></small></li>
   </div>
  </div>
 </ul> 
 <% end %>
 <h4 class="center description"><strong>Description:</strong></h4>
 <hr>
 <%= simple_format(@article.description) %>
 <div> <% if logged_in? %>
    <% if @article.liked?(current_user) %>
     <%= button_to "Like", like_path(@article), method: "put", disabled: true %>
     <% else %>
     <%= button_to "Like", like_path(@article), method: "put" %>
     <% end %>
     <% end %>
 </div>

看来问题就出在这里!!self.likes.find{|like| like.user_id == user.id}<% if @article.liked?(current_user) %>。似乎无法弄清楚问题所在。我正在使用 rails 5。任何帮助表示赞赏。

编辑:这是表(迁移):

class CreateLikes < ActiveRecord::Migration[5.1]
  def change
    create_table :likes do |t|
      t.belongs_to :user_id, foreign_key: true
      t.belongs_to :article_id, foreign_key: true

      t.timestamps
    end
  end
end

类似型号:

class Like < ApplicationRecord
  belongs_to :user_id
  belongs_to :article_id
  validates :user_id, uniqueness: {scope: :article_id}
end

标签: ruby-on-railsrubyruby-on-rails-5

解决方案


migration你的和你的似乎有问题Like model。您在迁移中引用user_idarticle_id使用 a belongs_to。而且您也在模型中使用belongs_to user_idarticle_id

对于迁移,您可以执行以下操作:

class CreateLikes < ActiveRecord::Migration[5.1]
  def change
    create_table :likes do |t|
      t.references :article, foreign_key: true
      t.references :user, foreign_key: true
      t.timestamps
    end
  end
end

你的模型应该是这样的:

class Like < ApplicationRecord
  belongs_to :user
  belongs_to :article
  validates :user_id, uniqueness: {scope: :article_id}
end

我希望这对你有用。


推荐阅读