前提・実現したいこと
一覧画面に投稿した文字を表示させたい
発生している問題・エラーメッセージ
投稿一覧と新規投稿を同じ画面で表示させたいのですが...
rails consoleから直接データを保存した場合は、投稿一覧に表示されます。
新規投稿でデータを入力し保存を押すと、投稿一覧でデータ部分が空欄になり文字が表示されません。
(ただし投稿した分のスペースは保存するたびに空いていくので何故文字が表示されないのかが分かりません)
該当のソースコード
index.html
1 <% @books.each do |book| %> 2 <tr> 3 <td><%= book.title %></td> 4 <td><%= book.body %></td> 5 <td><%= link_to "Show",book_path(book.id) %></td> 6 <td><%= link_to "Edit",edit_book_path(book.id) %></td> 7 <td><%= link_to 'Destroy',book_path(book.id), method: :delete %></td> 8 </tr> 9 <% end %> 10. 11. 12. 13 <h2>New book</h2> 14 <%= form_with model: @book, url:books_path, method: :post do |f| %> 15 <div class="field"> 16 <label for="book_title">Title</label> 17 <%= f.text_field :title %> 18 </div> 19 <div class="field"> 20 <label for="book_body">Body</label> 21 <%= f.text_area :body %> 22 </div> 23 <div class="actions"> 24 <%= f.submit "Create Book" %> 25 </div> 26 <% end %> 27
books_controller
1def new 2 @book=Book.new 3end 4 5def create 6 @book=Book.new 7 @book.save 8 redirect_to'/books' 9end 10 11def index 12 @books=Book.all 13end
どなたか解決よろしくお願いします。
ルーティングはちゃんどできているのでしょうか?
またrails cにおいてBook.allでレコードは取得できるのでしょうか?
ルーティングはresourcesメゾットを使用しており、books_path, method: :post でcreateアクションが実行されると認識していますがどうでしょうか?
reils cでBook.allを実行したところ、新規投稿から保存したデータが title:nil body:nil となっていました。
どうすれば、保存ができるようになりますか?
保存されていませんね
createアクションにおいて送られてきたパラメータを取得する必要があります。
@book = Book.new
@book.title = params[:title]
@book.body = params[:body]
@book.save
としてみてはどうでしょうか
またパラメータの受け取り方はストロングパラメータと検索していただければ分かりやすい記事があると思います
できました!
ありがとうございます!
postでパラメータを送ってもcreateアクションで受け取る処理を書かないと
値は格納されません。
railsでは送信されるパラメータは一律paramsとして受け取ることができるので覚えておくのがいいでしょう
個人的な意見ですが、初学者であればまずはscaffoldを使ってRailsの基本の型を覚えたほうが近道かと思います。
もちろん下記のように1行1行、なにをしているかきちんと理解する必要があるのですが。
http://kanjihtmt.github.io/blog/2015/04/02/scaffold/
いつでもscaffoldをベースとした書き方にするとRails wayに沿う形になりやすいので、就職後、他のエンジニアがみてもわかりやすくて良いかと思います。
回答1件
あなたの回答
tips
プレビュー