お世話になります。form_forで入力したデータが保存されません。
コントローラーのcreateアクションでbinding.pryを使い、@tweetの中身を確認した所nillでした。
form_forの書き方に問題があると思いましたが、分かりませんでした。
コントローラーに値を渡すにはどうすれば良いでしょうか?ご教授お願いします。
routes
Rails.application.routes.draw do devise_for :users root 'tweets#index' get 'tweets' => 'tweets#index' get 'tweets/new' => 'tweets#new' post 'tweets' => 'tweets#create' end
tweets_controller
def index @tweets = Tweet.includes(:user) end def new @tweet=Tweet.new(tweet_params) end def create @tweet=Tweet.create(text: tweet_params[:text],title_info: tweet_params[:title_info],user_id: current_user.id) if !@tweet.save render "new" end end private def tweet_params params.permit(:text,:title_info,:user_id) end
new.html.erb
<div class="contents row"> <div class="containe_r"> <%= form_for @tweet do |form| %> <h3> 投稿する </h3> <%= render 'layouts/error_messages', model: form.object %> <%= form.text_field :title_info,placeholder: "サブタイトル",class: "game_record",value: "#{@tweet.title_info}" %> <%= form.text_area :text, cols: 30 ,rows: 10,value: "#{@tweet.text}" %> <%=form.submit value: "SENT",class: "game_record"%> <% end %> <div class="back"> <%= link_to "戻る",root_path%> </div> </div> </div>
以下のform_tagで実装すると保存できたので、やはりform_forがおかしいかと思います
<%= form_tag('/tweets', method: :post) do %> <h3> 投稿する </h3> <input placeholder="タイトル" type="text" name="title_info"> <textarea cols="30" name="text" placeholder="text" rows="10"></textarea> <input type="submit" value="SENT"> <% end %>
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。