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| %>
<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 番目の列では、posts テーブルの category_id ではなく、Category テーブルのカテゴリ名 ("categoryname") を表示しようとしています。エラーが発生します:

#ActiveRecord::Relation:0x3e1a9b0> の未定義のメソッド `Category'

私も試しました:

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

しかし、同じエラーが発生します。

としても:

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

どんな提案でも大歓迎です。

4

5 に答える 5

11

あなたのモデルで

belongs_to :category

あなたの見解では

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

@categories =コントローラーの行を取り除くことができます

また、categoryname は、Category モデルに最適な属性名ではない可能性があります。単に名前を付けてみませんかnamepost.category.nameよりもはるかpost.category.categorynameに優れていると思いませんか?

于 2012-05-26T00:27:16.083 に答える
4

さて、いくつかのこと

belongs_to :categories  

belongs_to は特異な関係です。あなたは置くべきです

belongs_to :category 

この場合、posts テーブルに category_id が必要です。あなたはカテゴリを取得します

@post.category.categoryname

投稿に多くのカテゴリを含めることができない限り、その場合は必要です

#Post
has_and_belongs_to_many :categories

#Category
has_and_belongs_to_many :posts

この場合categories_posts、2 つのフィールドcategory_idで呼び出される結合テーブルが必要であり、post_id呼び出して取得します。

@post.categories.each do |cat|
  cat.categoryname
end

コードには他にもいくつかの問題があります。

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

カテゴリはモデルであり、名前付きの関係ではありません。これがおそらく、アプリケーションで例外が発生する理由です。

于 2012-05-26T00:27:52.883 に答える
2

次のエラーが表示されます

行の nil:NilClass に対する未定義のメソッド `categoryname': <%= post.category.categoryname %>

カテゴリが指定されていないレコードがテーブルにある場合。

つまり、すべてのレコードにカテゴリが関連付けられていることを確認してください。

于 2017-05-30T09:09:49.880 に答える
0

コントローラーの @category が小文字の c で始まることに気付きましたが、ビューでは大文字で始まります。

于 2013-10-02T07:46:01.633 に答える