Rails 4:在视图中链接关联的对象



好吧,我在网上搜索了所有内容,没有找到答案。我正在寻找一种在帖子的显示视图中显示"类别"名称的方法(我必须提到我是 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 为其他资源添加外键。现在一切正常。

相关内容

  • 没有找到相关文章

最新更新