Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在多视图表中显示名称而不是ID_Ruby On Rails_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails 在多视图表中显示名称而不是ID

Ruby on rails 在多视图表中显示名称而不是ID,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我试过其他类似的帖子,但仍然有一个错误 在Posts模型中,我有一个category_id字段。我有以下型号: #Posts model belongs_to :categories #Category model has_many :posts 在Posts索引控制器中,我有: @categories = @posts.Category.find(:all, :order => 'categoryname') 我认为: <% @posts.each do |post| %

我试过其他类似的帖子,但仍然有一个错误

在Posts模型中,我有一个category_id字段。我有以下型号:

#Posts model
belongs_to :categories  

#Category model
has_many :posts
在Posts索引控制器中,我有:

@categories = @posts.Category.find(:all, :order => 'categoryname')
我认为:

<% @posts.each do |post| %>
<tr>
<td><%= post.category_id %></td>
<td><%= @categories.categoryname %></td>

<td><%= link_to 'View', post %></td>
<td><%= link_to 'Edit', edit_post_path(post) %></td>
</tr>
<% end %>

在第2列中,我试图显示category表中的category名称(“categoryname”),而不是posts表中的category\u id。我得到一个错误:

#ActiveRecord::Relation:0x3e1a9b0>

我也尝试过:

<td><%= post.categories.categoryname %></td>

但是得到同样的错误

以及:

<td><%= post.category.categoryname %></td>

如有任何建议,将不胜感激

在您的模型中

belongs_to :category
在你看来

<td><%= post.category.categoryname %></td>

您可以去掉控制器中的
@categories=

此外,categoryname可能不是类别模型的最佳属性名称。为什么不把它命名为
name
post.category.name
似乎比
post.category.categoryname
好得多,你不觉得吗?

好的,有几件事

belongs_to :categories  
你所属的是一种单一的关系。你应该把

belongs_to :category 
在这种情况下,您需要posts表中的category_id。你可以通过

@post.category.categoryname
除非一篇文章可以有很多类别,在这种情况下你会想要

#Post
has_and_belongs_to_many :categories

#Category
has_and_belongs_to_many :posts
在这种情况下,您需要一个名为
categories\u posts
的联接表,其中包含两个字段
category\u id
post\u id
,您可以通过调用

@post.categories.each do |cat|
  cat.categoryname
end
您的代码还存在一些其他问题,例如

@categories = @posts.Category.find(:all, :order => 'categoryname')

Category是一个模型,而不是您的命名关系,这可能就是您在应用程序中遇到异常的原因。

我注意到控制器中的@Category以小写字母c开头,但在您看来,它以大写字母开头

在您的情况下,如果posts表中可能有一个空的category_id(正如您在评论中提到的),您可以添加

if post.category_id?
因此,您的手机将如下所示:

<td><%= post.category.categoryname if post.category_id? %></td>


如果post.category\u id为空,则只显示一个空单元格。

您将得到以下错误

行上nil:NilClass的未定义方法“categoryname”:

如果表中有未指定类别的记录


换句话说,请确保所有记录都有一个与其关联的类别

我已对模型和视图进行了更改。我现在得到:nil:NilClass的未定义方法'categoryname',行:我同意。name会比categoryname好,我会在第一次使用它后更改它。啊,我知道发生了什么。我在其中有一个空值,这就是它抛出错误的原因。我删除了它,它显示的名称!!!谢谢xnm和DVG!!