2016-02-11 72 views
0

好吧,我在网上搜索了一遍,发现没有答案。 我正在寻找一种方式来显示一个职位的展示视图中的“类别”的名称(我不得不提到我是Rails中的新手)。Rails 4:链接视图中的关联对象

我....

典范 “

class Post < ActiveRecord::Base 
    has_many :categories 
    belongs_to :user 
end 

典范 “分类

class Category < ActiveRecord::Base 
    belongs_to :post 
end 

和 “显示” 视图的“帖子”有这样一行

<%= @post.category.name %> 

错误消息的屏幕截图: NoMethodError in Posts#Show - undefined method `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也不再存在。是否有另一种方法来检索帖子的类别名称?

预先感谢您:-)

+0

经过一段时间...是不是明确提到的是,我想要自己的职位的类别显示。例如。有四种类别的“汽车”,“循环”,“船只”和“飞机”,展示视图中的实际文章是关于船只的文本,而不是我希望在文本下显示“船只”作为类别名称。不是所有可用的类别(用块创建)而不是第一个类别(用“... categories.first”创建)。 – dvdt

回答

1

不存在的方法类别,因为Post模型有许多“类”而不是一个“类”。邮政应该有方法“类别”。然后,如果你想显示在浏览后的第一个“类”:

<%= @post.categories.first.name %> 

如果你想显示信息的所有“类别”,那么你遍历集合:

+0

嗨阿曼多,非常快速的答复感谢。我已经尝试过,但只有“类别”才能阅读,而不是类别的名称。我看了。但是,无论如何,很好的解释这个代码行必须写的是什么。谢谢。 – dvdt

1

我得到了答案。我发现,从产品视图中的表格类别中获取数据的各种方法都无效。我比thougt,显示类别显示视图中的类别是简单的工作。有了这种想法的我采取了同样的代码,这一个:

应用程序/视图/分类/ show.html.erb

<p> 
    <strong>Name:</strong> 
    <%= @category.category_name %>   <--------this line 
</p> 
从类别显示视图

...并把它进入后显示视图。我不是再次得到了一个错误,但不同:

- 在帖子>NoMethodError#显示

好吧,这表示,实例变量“@Category”不适用于该展后视图。改变这很简单。我将类别控制器的show动作中的对象复制到了posts控制器的show动作中。像这样:

class PostsController < ApllicationController 
. 
. 
. 
    def show 
    @post = Post.find(params[:id]) 
    @category = Category.find(params[:id]) 
    end 

而且:它的工作原理! 但现在有没有这样做的错误?

干杯。

+0

发现了另一个解决该问题的方法。这是因为外键不是由rails设置的。我不得不手动将它添加到表格中。比第一种显示的方式运作良好。很好的学习下一个应用程序。我会在下周发布最新的安装程序。 – dvdt

0

我再次尝试并在我的代码中发现了真正的错误。外键没有被Rails设置。我必须手动。有一个“belongs_to”(在我的情况下,张贴表)需要添加外键(如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执行其他资源的外键。现在一切正常。