やりたいこと
最近Rails tutorialをやってみたので、簡単なクラウドファウンディングの画面を設計しています。
フォームにパラメータを入力、保存した後、別のオブジェクトに格納して表示する処理を実装しようとしています。
実装
下記のようなコードを書いています。
@post
に入力された値を@card
の各パラメータに格納する形をイメージしています。
例えば、
title:猫
address:品川区
amount:100
messeage:nyao
の様な入力をすると、top.html.erbにパラメータが渡るような形です。
create_post.html.erb
これは、入力フォームの画面になります。
create_post.html.erb
1<h1>投稿を追加</h1> 2 3<%= form_for(@post) do |f| %> 4 <%= f.label :title, "title" %> 5 <%= f.text_field :title %> <br /> 6 7 <%= f.label :address, "address" %> 8 <%= f.text_field :address %> <br /> 9 10 <%= f.label :amount, "amount" %> 11 <%= f.number_field :amount %> <br /> 12 13 <%= f.label :message, "message" %> 14 <%= f.text_field :message %> <br /><br /> 15 16 <%= f.submit %> 17<% end %> 18 19<br /> 20<%= link_to '投稿一覧へ戻る', post_path %> 21
post_controller.rb
postに関するコントローラは以下の様になります
質問に直接関わるのは、@card.each do |card|
の部分です。
class PostController < ApplicationController def post end def top # ダミーデータ @card = { "No.1" => {id:1, title:"漫画", address:"1111", amount:99999 , message:"1番の人だよ"}, } end def index @posts = Post.all end def create_post @post = Post.new end def create @post = Post.new(post_params) if @post.save @post.each do |post| @main_Title.push(post.title) @card = { card.id => {id: post.id , title:post.title, address:post.address, amount:post.amount , message:post.message}, } end redirect_to post_path, notice: "投稿に追加できました" else render :new end end private def post_params params.require(:post).permit(:title, :address, :amount, :message) end def card @currentId = params[:id] end end
top.html.erb
cardに格納されたデータを表示するページです
ダミーデータが表示されます。
<div class = "mainPosition"> <h1>プロジェクト一覧(新着順)</h1> <div class="postCards"> <% @card.each do |key,value| -%> <div class="postCard"> <div class = "mainTitle"> <h3> <%= value[:title] %> </h3> </div> <div class="postCardStatus"> <div class = "leftString"> <p>現在</p> <p><%= value[:amount] %></p> </div> <div class = "rightString"> <p>支援者</p> <p>9999人</p> </div> </div> </div> </div> <% end -%> </div>
確認できたこと
@card.each do |card|
の部分をコメントアウトしてダミーデータが以下の様にtop画面に表示されていることが確認できました。
また、postの値が保存されていることも確認できました。(見にくくてすいません)
求める実装は、@card
に@post
のパラメータを渡すことさえできれば実現しそうです。
エラー
create_postのフォームに入力後、top画面に遷移するはずですが次のエラーが出ました。
@postがnilと認識されているのはなぜでしょうか?
また、この@cardにパラメータを渡す場所はここで機能しうるのでしょうか?
調べてみましたが、今の私には原因が見つかりませんでした。
何かの基礎的知識が抜けているのであれば、そのあたりをご指摘もらえると幸甚です。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。