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

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

詳細はこちら
Ruby

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

Ruby on Rails

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

Q&A

解決済

1回答

2631閲覧

railsで確認ページを作っているが、Viewが変わらない

ueda_kesuke

総合スコア34

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2019/12/11 11:05

現在,Railsを使い投稿確認ページを作っているのですが、うまく遷移ができていません。
エラーが出ないのでどこを直したら良いのかで困ってしまいました。

#コード

controller

1class WorksController < ApplicationController 2 def new 3 @work = Work.new 4 end 5 6 def confirm 7 @work = Work.new(work_params) 8 render :new if @work.invalid? 9 end 10 11 def create 12 @work = Work.new(work_params) 13 if params[:back] 14 render :new 15 elsif @work.save 16 redirect_to @work, notice: 'Task was successfully created.' 17 else 18 render :new 19 end 20 end 21 22 23 private 24 def work_params 25 params.require(:work).permit(:title,:description,:url) 26 end 27end 28

routes

1Rails.application.routes.draw do 2 devise_for :users 3 root 'home#index' 4 resources :users 5 resources :works do 6 collection do 7 post 'confirm' 8 end 9 end 10end 11

以下が投稿ページです。

new.html.erb

1<%= form_for @work,url: {action: 'confirm'} do |f| %> 2 3<p>作品名</p> 4<%= f.text_field :title %> 5 6<p>紹介文</p> 7<%= f.text_area :description %> 8 9<p>URL</p> 10<%= f.text_field :url %> 11 12<%= f.submit "確認する" %> 13 14<% end %>

以下が投稿した後にある確認ページです。

confirm.html.erb

1<%= form_for @work do |f| %> 2 <%= @work.title %> 3 <%= f.hidden_field :title # <=データ保持 %> 4 <%= @work.description %> 5 <%= f.hidden_field :description # <=データ保持 %> 6 <%= @work.url %> 7 <%= f.hidden_field :url # <=データ保持 %> 8 <div class="actions"> 9 <%= f.submit '投稿画面に戻る', name: 'back' %> 10 </div> 11 <div class="actions"> 12 <%= f.submit '投稿する' %> 13 </div> 14<% end %>

#問題点
投稿ページから「確認する」ボタンを押したらURLは変わるのですが、viewが変わりません。
ボタンが「投稿する」にならず、「確認する」のままという感じです。
何度もボタンを押しても保存できない状況です。

Started GET "/works/new" for 10.0.2.2 at 2019-12-11 10:56:13 +0000 Cannot render console from 10.0.2.2! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255 Processing by WorksController#new as HTML Rendering works/new.html.erb within layouts/application Rendered works/new.html.erb within layouts/application (2.5ms) User Load (0.8ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT ? [["id", 4], ["LIMIT", 1]] ↳ app/views/layouts/application.html.erb:21 Completed 200 OK in 242ms (Views: 189.5ms | ActiveRecord: 6.1ms) Started POST "/works/confirm" for 10.0.2.2 at 2019-12-11 10:56:19 +0000 Cannot render console from 10.0.2.2! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255 Processing by WorksController#confirm as HTML Parameters: {"utf8"=>"✓", "authenticity_token"=>"00IJMBDrlh/bFrblndfQfBaXdAZkfuWr0tjhK1PiOk92KH7Uo5wM2t+O8ivvc6XPaE0jvjzP1+DmqrUvmnl1qg==", "work"=>{"title"=>"uu", "description"=>"yy", "url"=>"tt"}, "commit"=>"確認する"} Rendering works/new.html.erb within layouts/application Rendered works/new.html.erb within layouts/application (1.3ms) User Load (0.8ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT ? [["id", 4], ["LIMIT", 1]] ↳ app/views/layouts/application.html.erb:21 Completed 200 OK in 317ms (Views: 279.1ms | ActiveRecord: 0.8ms)

#試してみたこと
以下の記事を参考にroutesをネストしたり、データ保持のコードを入れたりしてみましたが、変化なし..という状況です。
ご教授いただけると幸いです????‍♂️

足りない情報などありましたら教えていただけると嬉しいです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

追記回答します.

拝見しました。
コンソールを見た感じ、works/confirmへのpostリクエストはしてるみたいなんで、以下のconfirmアクションを確認して欲しいです。
@workが不正な場合、newページに遷移するとして、正常だった場合、どこに遷移するんですか?
confirmというビューがあるんでしょうか?
確認ページのファイル名がわからなかったので…

def confirm @work = Work.new(work_params) render :new if @work.invalid? end

以上です。

追記回答

私の環境で質問者さんのコードで動作するか確認しましたが、問題なく、動作していました。
私の環境ではconfirmビューのform_for内でコメントをつけるとエラーが出たので、コメントは削除しましたが...
動作時のコンソールを比較したのですが、下記の1文が原因ではないかと思います。
confirmページの表示に失敗して、newページが再度表示されているログになっていると思います。

Cannot render console from 10.0.2.2! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255 Processing by WorksController#confirm as HTML

このエラーの対処法が下記のページに記載されているようなので、試してみてはどうでしょうか。
https://remonote.jp/rails-cannot-render-console
https://qiita.com/suin/items/9b567c63af73b235e458

解決するといいのですが...

以上です。

投稿2019/12/11 15:32

編集2019/12/12 12:08
KazuSaka

総合スコア640

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

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

ueda_kesuke

2019/12/11 22:17

ご回答ありがとうございます! 失礼しました。以下がconfirmのviewになります。 ``` <%= form_for @work do |f| %> <%= @work.title %> <%= f.hidden_field :title # <=データ保持 %> <%= @work.description %> <%= f.hidden_field :description # <=データ保持 %> <%= @work.url %> <%= f.hidden_field :url # <=データ保持 %> <div class="actions"> <%= f.submit '投稿画面に戻る', name: 'back' %> </div> <div class="actions"> <%= f.submit '投稿する' %> </div> <% end %> ``` おかしな記述ありますでしょうか?
ueda_kesuke

2019/12/12 12:41

ご回答ありがとうございます!! おっしゃる通り先ほどのコンソールの表示は消えました!しかし相変わらずnewにレンダリングされてしまうという状況です...。 Started POST "/works/confirm" for 10.0.2.2 at 2019-12-12 12:37:00 +0000 Processing by WorksController#confirm as HTML Parameters: {"utf8"=>"✓", "authenticity_token"=>"CplnlVAjxD6842ptFpoBfv/FddCGYaHbJmgGs2q38gAbYc5x95LuVfx2O67uQiFxl4Q0tBW+GtgUdDR1miL8SA==", "work"=>{"title"=>"a", "description"=>"aa", "url"=>"a"}, "commit"=>"確認する"} Rendering works/new.html.erb within layouts/application Rendered works/new.html.erb within layouts/application (1.9ms) User Load (1.4ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT ? [["id", 5], ["LIMIT", 1]] ↳ app/views/layouts/application.html.erb:21 Completed 200 OK in 523ms (Views: 486.7ms | ActiveRecord: 1.4ms) vagrant環境を使用しているのですが、他の環境で試した方がいいのでしょうか?
KazuSaka

2019/12/12 13:14

workテーブルはどんなバリデーションを設定してますか? confirmアクション内で@work.invalid?がtrueになってる可能性があると思います。その場合、newページに遷移するので。 私の環境で、バリデーション設定して、invalid?をTrueにさせたら、donpiさんと同じログになりました。
ueda_kesuke

2019/12/15 08:27

ご回答ありがとうございます!現在はカラムに対して「presence: true」しか入れていません。
KazuSaka

2019/12/15 10:26 編集

全てのカラムに文字を入れているので、それは問題なさそうですね。 以下のようにputsで直接、真偽値を確認してほしいです。 def confirm @work = Work.new(work_params) puts "真偽値:#{@work.invalid?}"    render :new if @work.invalid? end 以上
ueda_kesuke

2019/12/15 12:36

ありがとうございます。 Started POST "/works/confirm" for 10.0.2.2 at 2019-12-15 12:33:47 +0000 Processing by WorksController#confirm as HTML Parameters: {"utf8"=>"✓", "authenticity_token"=>"Yv2HwRmrTGVEJjZ6CPc7OBLb31O2hZOCm8OhAqaAB/vhDPkz1jhwoxZGJj5YVZ0MHrG0KWAbdrm528yVhfMNdw==", "work"=>{"title"=>"aa", "description"=>"aa", "url"=>"aa"}, "commit"=>"確認する"} 真偽値:true Rendering works/new.html.erb within layouts/application Rendered works/new.html.erb within layouts/application (1.1ms) User Load (0.8ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT ? [["id", 7], ["LIMIT", 1]] ↳ app/views/layouts/application.html.erb:21 Completed 200 OK in 309ms (Views: 262.9ms | ActiveRecord: 0.8ms) 真偽値はtrueになっているのですが、どういった状況なのでしょうか??
ueda_kesuke

2019/12/15 12:38

@workへの保存がうまくいっていないということでしょうか?
KazuSaka

2019/12/15 13:27 編集

そこが正しく判定されれば、解決しそうですね。 .invalid?はバリデーションチェックするメソッドなので、データが正しくないと判定されてます。 work_paramsの値もputsで調べて欲しいです。あと、db/schema.rbとmodels/work.rbを見せて欲しいです。DBに登録してあるカラム名は合ってますよね?
ueda_kesuke

2019/12/16 02:11

ありがとうございます!workに紐づけてあったuser_idカラムがとれていなかったようです。 current_userからデータをとることで解決することができました!!僕のはちゃめちゃな質問に付き合ってくださりありがとうございます!!
KazuSaka

2019/12/16 03:31

なるほど。そこが原因だったんですね! お疲れ様でした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問