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

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

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

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

Ruby on Rails 4

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

Q&A

解決済

2回答

1286閲覧

Rails Postを新規作成する際のカテゴリの付け方がわからない

YusukeAnzai

総合スコア13

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

Ruby on Rails 4

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

0グッド

0クリップ

投稿2018/05/24 19:36

わからないこと:Postの新規作成の際に、categoryをどのようにつけるか。

前提:PostモデルとCatgeoryモデルがある。Postモデルには、title,content,catgory_idカラムが存在し、Categoryモデルとアソシエーション済。

<具体的にわからないこと>
/posts/new
form_forを用いて、下記のformを作成した。
イメージ説明
上記フォームの画像の中の"Category"というフィールドでcategory_idを数値で設定する

Ruby

1<%= form_for(@post) do |f| %> 2 <%= f.label:title %> 3 <%= f.text_field:title %> 4 5 <%= f.label:content %> 6 <%= f.text_field:content,size:50 %> 7 8 <%= f.label:category %> 9 <%= f.number_field:category %> 10 11 <%= f.submit "提出する" %> 12 <% end %>

そして、コントロラーに移行する。

Ruby

1class PostsController < ApplicationController 2 3 def new 4 @post=Post.new 5 end 6 7 def create 8 category=Category.find(category_params) 9 @post=category.posts.build(post_params) 10 if @post.save 11 render 'normal/home' 12 13 else 14 redirect_to root_url 15 end 16end 17 18 19 private 20 21 def category_params 22 params.require(:post).permit(:category_id) 23 end 24 25 def post_params 26 params.require(:post).permit(:title,:content) 27 end 28 29end

この時に、なぜか、category_idが入りません。createの1行目でつまづきます。
なお

Ruby

1category=Category.find(2)

とした時は、うまく行きました。

なぜ、category_idの値が入らないのか、教えていただけると嬉しいです!
調べてもわかりませんでした。

ご回答いただけると幸いです。

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

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

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

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

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

guest

回答2

0

ベストアンサー

すみません、説明が少なすぎました。

Ruby

1category=Category.find_by(id:category_params)

ではなく、

Ruby

1category=Category.find_by(category_params)

こうすればいかがでしょうか?

パラメーターは、ただの値ではなくハッシュ値ですので、
中身がhoge: hugaとなっています。
ですので、数値のみを引数にとるfindにハッシュ値を入れるとエラーが出るのではないでしょうか?

間違っていたら、すみません。

または、

Ruby

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

こちらでもいけないでしょうか?

投稿2018/05/27 12:56

junya451054

総合スコア69

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

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

YusukeAnzai

2018/05/27 12:59

ご回答ありがとうございます! エラーなく成功しました!初歩的な質問で恐縮でした。 本当にありがとうございました!
guest

0

find_byならどうですか?

投稿2018/05/25 07:32

junya451054

総合スコア69

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

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

YusukeAnzai

2018/05/26 15:36 編集

返信が遅くなり大変申し訳ありません。 (通知メールがなぜか迷惑メールになっていて気づきませんでした。。。) category=Category.find_by(id:category_params) も試しましたが、解決しませんでした。。。 @post=category.posts.build(post_params)のところで引っかかります。 undefined method `posts' for nil:NilClassとエラーが出ます。 category=Category.find(2)の時はうまくいくので、 def category_params params.require(:post).permit(:category_id) end 上記に問題があるのかなと思ったのですが、考えてもわかりませんでした。。
YusukeAnzai

2018/05/26 16:06

ちなみに、ストロングパラメーターを使わずに category=Category.find(params[:post][:category_id]) と書き換えたらうまくいきましたが、なぜストロングパラメータが機能しないのかわかりません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問