好吧,我在网上搜索了所有内容,没有找到答案。我正在寻找一种在帖子的显示视图中显示"类别"名称的方法(我必须提到我是 Rails 的新手)。
我有。。。。
一个模型"帖子"
class Post < ActiveRecord::Base
has_many :categories
belongs_to :user
end
模型"类别"
class Category < ActiveRecord::Base
belongs_to :post
end
而"帖子"的"显示"视图有这样的一行
<%= @post.category.name %>
屏幕截图中的错误消息:帖子中的 NoMethodError #Show - 未定义的方法 'category' for #
"帖子"控制器中的"显示"操作:
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 以来,这已不复存在。有没有其他方法可以检索帖子的类别名称?
提前谢谢你:-)
我得到了答案。我发现,从产品视图中的表类别中获取数据的所有方法都不起作用。我比你,在类别显示视图中显示类别很简单。考虑到这个想法,我采用了相同的代码,这个代码:
app/views/categories/show.html.erb
<p>
<strong>Name:</strong>
<%= @category.category_name %> <--------this line
</p>
。从类别显示视图中,并将其放入发布显示视图中。我又得到了一个错误,但不同:
--> 帖子中的NoMethodError #show
好的,这表示实例变量"@category"不适用于显示后视图。改变这一点很容易。我将对象从类别控制器的显示操作复制到帖子控制器的显示操作中。喜欢这个:
class PostsController < ApllicationController
.
.
.
def show
@post = Post.find(params[:id])
@category = Category.find(params[:id])
end
而且:它有效!!!但是现在,这样做有什么不对吗?
干杯。
方法类别不存在,因为 Post 模型有许多"类别"而不是一个"类别"。帖子应该有"类别"方法。然后,如果您想在视图中显示帖子的第一个"类别":
<%= @post.categories.first.name %>
如果要显示帖子的所有"类别",则可以迭代集合:
<% @post.categories.each do |category| %>
<%= category.name %>
<% end %>
我再次尝试,发现我的代码中出现了真正的错误。 外键不是由 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
第四,按照步骤 1 到 3 为其他资源添加外键。现在一切正常。