ruby-on-rails - 未初始化的常量 Like::ArticleId
问题描述
我正在尝试使用基于教程here和here的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
解决方案
migration
你的和你的似乎有问题Like model
。您在迁移中引用user_id
并article_id
使用 a belongs_to
。而且您也在模型中使用belongs_t
o user_id
和article_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
我希望这对你有用。
推荐阅读
- python - 即使有训练集,Keras 二值图像分类器也会返回 1 个类别
- python-3.x - 使用“cherrypy.tree.mount”时无法连接到 Dockerized CherryPy 服务器
- vba - VBA 在保留标题的同时删除了过滤的行
- java - 实现了 4 个参数的自定义二进制搜索,但如何避免迭代获得下限?
- python - mock.patch.dict at class level - python unit test
- php - Composer codeIgniter “无需安装或更新”甚至将库添加到 composer JSON
- javascript - 获取下拉值然后将其插入表格内的文本框,但不更改第二行
- php - 显示词尾取决于性别(波兰语问题),PHP
- sql-server - 在 MS SQL Server 中使用 case...when 语句时,如何屏蔽某些值并保持唯一性?
- timer - 使用计时器读取运行时数据