好的,我搜索了整个网络,没有找到答案。 我正在寻找一种在帖子的节目视图中显示“类别”名称的方法(我不得不提到我是Rails中的新手)。
我有......
模型“发布”
class Post < ActiveRecord::Base
has_many :categories
belongs_to :user
end
模型“类别”
class Category < ActiveRecord::Base
belongs_to :post
end
并且“帖子”的“显示”视图有这样的一行
<%= @post.category.name %>
屏幕截图错误消息: SQLEndTran
“帖子”控制器中的“显示”操作:
def show
@post = Post.find(params[:id])
end
我正在使用udemy上的一些过时的培训视频构建此应用。在此视频中,类别模型中有一行“attr_accessible”
class Category < ActiveRecord::Base
attr_accessible :name <---------------------- this
has_many :posts
end
...但是自从Rails 4.0以来这已经不存在了。有没有其他方法来检索帖子的类别名称?
提前谢谢: - )
答案 0 :(得分:1)
方法类别不存在,因为Post模型有许多“类别”而不是一个“类别”。邮政应该有方法“类别”。然后,如果您想在视图中显示帖子的第一个“类别”:
<%= @post.categories.first.name %>
如果要显示帖子的所有“类别”,则迭代集合:
<% @post.categories.each do |category| %>
<%= category.name %>
<% end %>
答案 1 :(得分:1)
我得到了答案。我发现,从产品视图中的表类别中获取数据的各方面都无法正常工作。我比thougt,在类别显示视图中显示类别是简单的工作。考虑到这个想法,我采用了相同的代码,这一个:
应用程序/视图/类别/ show.html.erb
<p>
<strong>Name:</strong>
<%= @category.category_name %> <--------this line
</p>
...从类别show视图中将其放入post show视图中。我再次犯了一个错误,但不同:
- &GT;帖子中的 NoMethodError#show
好的,这表示实例变量“@category”不适用于post show视图。改变这很容易。我将对象从类别控制器的show动作复制到了posts控制器的show动作中。像这样:
class PostsController < ApllicationController
.
.
.
def show
@post = Post.find(params[:id])
@category = Category.find(params[:id])
end
而且:它有效!!!! 但现在,这样做有什么不对吗?
干杯。
答案 2 :(得分:0)
我再次尝试并在我的代码中发现了真正的错误。 Rails没有设置外键。我必须手动完成。具有“belongs_to”的表(在我的情况下是posts表)需要添加一个外键(如category_id)。
首先创建迁移文件:
rails g migration add_foreign_key_to_posts_table
第二次将迁移代码添加到迁移文件中:
class AddForeignKeyToPostsTable < ActiveRecord::Migration
def change
add_foreign_key :posts, :categories
end
end
第三次使用以下命令来迁移数据库迁移:
rake db:migrate
第四步,按照第一步到第三步为其他资源添加外键。现在一切正常。