🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ruby on Rails

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

Q&A

解決済

3回答

442閲覧

投稿ページを作成したらActiveModel::UnknownAttributeError in MyblogController#create

yamada_yuuki

総合スコア100

Ruby on Rails

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

0グッド

0クリップ

投稿2019/10/30 09:42

編集2019/10/30 09:43

railsで投稿ページを作り送信したらエラーが出てしまいました。 
ちなみにモデルにはちゃんとtitleを設定しています。

error

1Started POST "/myblog/add" for ::1 at 2019-10-30 18:32:58 +0900 2Processing by MyblogController#create as HTML 3 Parameters: {"utf8"=>"✓", "authenticity_token"=>"mr9PJklvc6xO8mnaUQh2JyKjpWi5JKNxCMQwsSYjLx1YgTBYKH9IM 41EzM4F2znLCseRPiI2VtLiayWOUumBWtw==", "aaa"=>{"title"=>"xxx", "subtitle"=>"xxx", "stylename"=>"あああ"}, "commit"=>"送信"} 5Completed 500 Internal Server Error in 67ms (ActiveRecord: 7.5ms) 6 7 8 9ActiveModel::UnknownAttributeError (unknown attribute 'title' for Myblog.): 10 11app/controllers/myblog_controller.rb:21:in `create'

myblogrb

1class Myblog < ApplicationRecord 2 validates :title, :subtitle, :stylename, presence: {message:'は、必須事項です。'} 3end

myblogcontroller

1class MyblogController < ApplicationController 2 layout 'myblog' 3 before_action :authenticate_myblog!, only: :login_check 4 5 def login_check 6 end 7 8 def setting 9 end 10 11 def index 12 @msg = 'みんなのブログ' 13 end 14 15 def add 16 @myblog = 'aaa' 17 end 18 19 def create 20 if request.post? then 21 obj = Myblog.create( 22 title: params['title'], 23 subtitle: params['subtitle'], 24 stylename: params['stylename'], 25 ) 26 end 27 redirect_to 'myblog/top' 28end 29 30 def show 31 end 32 33 def top 34 @myblog = Myblog.all 35 end 36end 37 38 private 39 def myblog_params 40 params.require(:myblog).permit(:title, :subtitle, :stylename) 41 end

addhtmlerb

1<h1>投稿ページ</h1> 2<table> 3<%= form_for(@myblog, url:{controller:'myblog', action:'create'}) do |f| %> 4<tr><th>タイトル</th> 5 <td><%= f.text_field :title %></td></tr> 6<tr><th>サブタイトル</th> 7 <td><%= f.text_field :subtitle %></td></tr> 8<tr><th>本文</th> 9 <td><%= f.text_field :stylename %></td></tr> 10<tr><th></th> 11 <td><%= f.submit '送信' %></td></tr> 12<% end %> 13</table>

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

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

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

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

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

guest

回答3

0

def create if request.post? then obj = Myblog.create( title: params['title'], subtitle: params['subtitle'], stylename: params['stylename'], ) end

の部分を

def create if request.post? then obj = Myblog.create(myblog_params) end

にしてみてください

投稿2019/10/30 10:10

k-810

総合スコア192

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

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

yamada_yuuki

2019/10/30 12:05 編集

回答ありがとうございます。早速そのようにしてみたらつぎのエラーが出てしまいました。 Started POST "/myblog/add" for ::1 at 2019-10-30 20:58:47 +0900 Processing by MyblogController#create as HTML Parameters: {"utf8"=>"✓", "authenticity_token"=>"KYWrmlveSRXbu90Bu3fLOey5rIUKPM500exgIluCu73ru9TkOs5yi sR6h1qcsc/cf/5GZT6N2b1D4TMHx8HCFw==", "aaa"=>{"title"=>"”xxx, "subtitle"=>"xxx", "stylename"=>"あああ"}, "commit"=>"送信"} Completed 400 Bad Request in 17ms (ActiveRecord: 0.0ms) ActionController::ParameterMissing (param is missing or the value is empty: myblog): app/controllers/myblog_controller.rb:35:in `myblog_params' app/controllers/myblog_controller.rb:21:in `create' このエラーも解決法がわかりません。最後まで他人任せで申し訳ございません。
k-810

2019/10/30 14:36

こちらこそ適切な回答を差し上げられなくて申し訳ありません def create if request.post? then obj = Myblog.create( title: params['title'], subtitle: params['subtitle'], stylename: params['stylename'], ) end の部分を def create if request.post? then obj = Myblog.create( title: params[:title], subtitle: params[:subtitle], stylename: params[:stylename], ) end にしてみたらどうなりますか?
k-810

2019/10/30 14:59

また,Myblogのデータベースのカラムにちゃんとtitleがあるか確認してください
yamada_yuuki

2019/10/31 07:32

何度も回答ありがとうございます。試してみましたが、おんなじエラーが出てきました。あとmyblogのデータベースにはちゃんとtitleが設定されています。
guest

0

自己解決

一回諦めて新しくおんなじのを作ったら何故か成功しました。今まで回答してくれた皆様、ありがとうございました。

投稿2019/11/02 09:39

yamada_yuuki

総合スコア100

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

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

0

if request.post? then obj = Myblog.create( title: params['title'], subtitle: params['subtitle'], stylename: params['stylename'], ) end

if request.post? then obj = Myblog.create(myblog_params) end

でいいと思うのですが、1点気になる点があります。

private def myblog_params params.require(:myblog).permit(:title, :subtitle, :stylename) end

ここで
params.require(:myblog)
としてますが、

実際に送信されているparamsが
"aaa"=>{"title"=>"xxx", "subtitle"=>"xxx", "stylename"=>"あああ"}
となっています。

aaaのまま送るのであれば、

private def myblog_params params.require(:aaa).permit(:title, :subtitle, :stylename) end

と変更する必要があります。

そうではなく、myblogとしてparamsを送るのであれば、

def add @myblog = 'aaa' end

def add @myblog = Myblog.new end

で現在のエラーはなくなるかと思います。

投稿2019/10/31 07:52

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

yamada_yuuki

2019/10/31 08:18

回答ありがとうございます。そうすると今までのエラーはなくなりましたが、 ActionView::Template::Error (undefined method `title' for #<Myblog:0x000000000e533230>): 2: <table> 3: <%= form_for(@myblog, url:{controller:'myblog', action:'create'}) do |f| %> 4: <tr><th>タイトル</th> 5: <td><%= f.text_field :title %></td></tr> 6: <tr><th>サブタイトル</th> 7: <td><%= f.text_field :subtitle %></td></tr> 8: <tr><th>本文</th> このようなエラーが出てしまいます。どうしたら良いでしょうか。
退会済みユーザー

退会済みユーザー

2019/11/01 01:03

@myblog = Myblog.new としてのエラーでしょうか? db/schema.rbのmyblogの部分を記載できますでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問