質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

解決済

1回答

12099閲覧

railsで「Couldn't find Category with 'id'=」を解決できません。

yuta_tokyo

総合スコア35

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

0グッド

0クリップ

投稿2017/01/07 14:35

編集2017/01/07 14:38

どなたかご教授ください。

現在、1対1の関係でCategoryとPost,1対多の関係でPostとCommentsでwebアプリケーションを制作しようとしています。

PostするときするときにCategoryを選択する仕様を実装し、
post.title,post.name(投稿者),p_cat(ポストに紐づいたカテゴリー)を送信したいです。

###現在postしたときに表示されるエラーメッセージ
ActiveRecord::RecordNotFound in PostsController#create
Couldn't find Category with 'id'=

###Categoryのカラムにすでにデーターは入れています
以下はコンソール上で、Category.allを実行したときの様子です。

$ Category.all => #<ActiveRecord::Relation [#<Category id: 1, p_cat: "#####", created_at: "2017-01-07 13:00:02", updated_at: "2017-01-07 13:00:02">,

###以下のコードは今回のエラーに関係ありそうなコードです
▼routes.rb(一部)

resources :category do resources :posts end resources :posts do resources :comments end

▼Postの_form.html.erbです

<%= form_for(post) do |f| %> <% if post.errors.any? %> <div id="error_explanation"> <h2><%= pluralize(post.errors.count, "error") %> prohibited this post from being saved:</h2> <ul> <% post.errors.full_messages.each do |message| %> <li><%= message %></li> <% end %> </ul> </div> <% end %> <div class="field"> <%= f.label :title %> <%= f.text_field :title %> </div> <div class="field"> <%= f.label :name %> <%= f.text_field :name %> </div> <%= f.collection_select :id, Category.all, :id, :p_cat %> <div class="actions"> <%= f.submit %> </div> <% end %>

▼categoryのdb>migrateファイルです

class CreateCategories < ActiveRecord::Migration[5.0] def change create_table :categories do |t| t.string :p_cat t.timestamps end end end

▼postのdb>migrateファイルです

class CreatePosts < ActiveRecord::Migration[5.0] def change create_table :posts do |t| t.string :title t.string :name t.references :category, foreign_key: true t.timestamps end end end

▼posts_controller.rbのcreateアクションです

def create @category = Category.find(params[:category_id]) @post = @category.posts.create(post_params)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Couldn't find Category with 'id'=posts_controller.rb

ruby

1@category = Category.find(params[:category_id])

によってCategoryを見つけられないということを示しています。そのことから、ブラウザからcategory_idが送られていないではないかと予想します (Railsのログを貼ってもらえると断定できるのですが)。

_form.html.erbを下記のように修正してみてください。

ruby

1# <%= f.collection_select :id, Category.all, :id, :p_cat %> 2 <%= f.collection_select :category_id, Category.all, :id, :p_cat %>

あと今回のエラーには直接関係ないですが、routes.rbのcategoryのところは複数形となる方がRailsの規約に沿っていると思います。

ruby

1 # resources :category do 2 resources :categories do 3 resources :posts 4 end

投稿2017/01/17 14:53

d-mato

総合スコア41

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問