質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby on Rails

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

Q&A

1回答

506閲覧

rails5 createアクションが動かない

maxi

総合スコア0

Ruby on Rails

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

0グッド

0クリップ

投稿2021/07/13 07:32

編集2021/07/14 07:21

前提・実現したいこと

現在、会社ごとに営業管理を行うようなサイトをPFしたいと考え、作成しております。
deviseを実装後、グループ機能のようなもので会社専用のページを作成しようと考え、実装してみましたが、グループの新規作成ができません。
logから原因としてcreateが作動していないことが原因かと考えておりますが、改善方法がどうしてもわかりませんでした。

プログラミング初心者なので根本的なことがわかってないかもしれないのですが、ご教授いただけると幸いです。

発生している問題・エラーメッセージ

エラーメッセージはなく、newページへ戻る

該当のソースコード

controller

1class CampaniesController < ApplicationController 2 3 def new 4 @campany = Campany.new 5 @campany.users << current_user 6 @password = SecureRandom.alphanumeric(8) 7 end 8 9 def create 10 @campany = Campany.new(Campany_params) 11 if @campany.save 12 redirect_to campanies_path, notice: 'グループを作成しました' 13 else 14 render :new 15 end 16 end 17 18 def index 19 @campanies = Campany.all.order(updated_at: :desc) 20 end 21 22 def show 23 @campany = Campany.find_by(id: params[:id]) 24 25 if !@campany.users.include?(current_user) 26 @campany.users << current_user 27 end 28 29 30 end 31 32 private 33 def campany_params 34 params.require(:campany).permit(:name, :code) 35 end 36 37end 38

html

1<head> 2 <meta charset="utf-8"> 3 <%= javascript_include_tag 'application' %> 4</head> 5 6<body> 7 <div class="container"> 8 <div class="row"> 9 <div class="col"> 10 <h2>新規企業ページ作成</h2> 11 <form> 12 <%= form_with model: @campany, local:true do |f| %> 13 <div class="form-group row"> 14 <label class="col-sm-2 col-form-label">会社名</label> 15 <div class="col-sm-10"> 16 <%= f.text_field :name, class: "form-control", placeholder: "会社名"%> 17 </div> 18 </div> 19 <div class="form-group row"> 20 <label for="inputCode" class="col-sm-2 col-form-label">企業コード</label> 21 <div class="col-sm-10"> 22 <%= f.text_field :code, class: 'form-control', id: 'password' %> 23 <%= button_tag '企業コードを生成する', id: 'auto-fill-link', type: "button" %> 24 </div> 25 </div> 26 <%= f.submit "作成する" %> 27 <% end %> 28 </form> 29 </table> 30 </div> 31 </div> 32</div> 33 34<!--乱数作成用--> 35<script> 36 $(function(){ 37 autoFill(); 38 function autoFill() { 39 $('#auto-fill-link').click(function(){ 40 $('#password').val("<%= @password %>"); 41 }); 42 } 43 }) 44</script> 45</body>

model

1class Campany < ApplicationRecord 2 3 has_many :campany_users 4 has_many :users, through: :campany_users 5 validates :name, presence: true 6 validates :code, presence: true 7 8end

table

1create_table "campanies", force: :cascade do |t| 2 t.string "name" 3 t.string "code" 4 t.datetime "created_at", null: false 5 t.datetime "updated_at", null: false 6 end

log

1Started GET "/campanies/new?utf8=%E2%9C%93&authenticity_token=8OGnqKWkq07IxNVqajWFghxuJRdPphTleDMCUUsAPEBsdfNjiHj1q%2FgcSBNuSa1rm9VDxJnKnjFksbzWu3iRdA%3D%3D&campany%5Bname%5D=%E6%A0%AA%E5%BC%8F%E4%BC%9A%E7%A4%BE%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB&campany%5Bcode%5D=wGcDRsNr&commit=%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B" for 121.83.77.164 at 2021-07-14 07:16:01 +0000 2Cannot render console from 121.83.77.164! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255 3Processing by CampaniesController#new as HTML 4 Parameters: {"utf8"=>"✓", "authenticity_token"=>"8OGnqKWkq07IxNVqajWFghxuJRdPphTleDMCUUsAPEBsdfNjiHj1q/gcSBNuSa1rm9VDxJnKnjFksbzWu3iRdA==", "campany"=>{"name"=>"株式会社サンプル", "code"=>"wGcDRsNr"}, "commit"=>"作成する"} 5 User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT ? [["id", 1], ["LIMIT", 1]] 6 ↳ app/controllers/campanies_controller.rb:5 7 Rendering campanies/new.html.erb within layouts/application 8 Rendered campanies/new.html.erb within layouts/application (51.6ms) 9Completed 200 OK in 118ms (Views: 114.2ms | ActiveRecord: 0.2ms)

試したこと

記述の見直し

補足情報(FW/ツールのバージョンなど)

rails5
参考記事:https://qiita.com/savaniased/items/ce7dd5a825ad0f6be53c

不足情報あれば追記いたします。

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

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

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

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

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

guest

回答1

0

正直エラーメッセージがないと原因の特定は難しいのですが、今提供されている情報を見る限り、 create アクションは動いているがヴァリデーションで止まっているように見えます。

if @campany.save redirect_to campanies_path, notice: 'グループを作成しました' else render :new end

こういう処理になっていますよね。
この条件分岐は @company の保存に成功しない場合、new と同じ表示を行います。
画面表示的には new と変わりませんがブラウザのURL欄を見ると異なっているんじゃないでしょうか。

Company モデルの保存の際は、適切な値が格納されている必要があります。どんなモデル定義なのか分かりませんが、参照した Qiita 記事の Group モデルと同様だとすると、name に値がセットされていないんじゃないかと思います。

貼り付けられている HTML はおそらく new.html.erb だと思いますが、このページのテンプレートは、

  • 新規作成
  • 新規作成に失敗したときのヴァリデーションエラーの表示

の二通りの目的で使用されます。
create アクションで動作する際にはこの後者で表示されるのですが、ヴァリデーションエラー表示部分が抜けているために何が起こっているのか分からないのだと思います。
Qiitaの記事をどう消化したのかよく分かりませんが、- if group.errors.any? で始まるエラーメッセージ表示部分を持ってくることができたら、ヴァリデーションエラーをうまく表示できるようになると思います。

投稿2021/07/13 19:12

oakbow

総合スコア227

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

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

maxi

2021/07/14 07:26

回答ありがとうございます。 ご指摘いただいた通り、URLがnewと異なっておりました。 但し、一度remderの指定等を外してみたのですが、ページの遷移もエラーも発生しませんでした。 他にも記載いただいている内容のモデル及びカラム、バリデーションかと考え、修正等をしてみたのですが、解決できませんでした。 モデル、カラム、logを追記したので、お手数ですが対処法をご教授いただけないでしょうか。
oakbow

2021/07/14 07:53

renderを外せば何も表示されないのはそれはそうです。「newテンプレートを使って画面を描画しろ」という命令を削除しているんですから。 根本的な解決は上の回答に書いた通りヴァリデーションエラー表示部分をnewに追加することですが、これが難しいようなら @campany.save -> @campany.save! に変えて処理を実行してみてください。 エラーが発生するんじゃないかと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問