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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Sequel Pro

Sequel Proは、Mac OS X向けMySQLフロントエンドです。GUIからのMySQLの操作・管理が可能になります。強力なクエリ編集、多彩なエンコーディングオプションのサポートなど多くの機能を備えています。

Haml

Haml(HTML abstraction markup language)は、HTML/XHTMLを効率的に記述するためのマークアップ言語および記法です。

Ruby on Rails

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

Q&A

解決済

1回答

688閲覧

railsでnewアクション、createアクションが出来ない

ryuuzu

総合スコア30

Sequel Pro

Sequel Proは、Mac OS X向けMySQLフロントエンドです。GUIからのMySQLの操作・管理が可能になります。強力なクエリ編集、多彩なエンコーディングオプションのサポートなど多くの機能を備えています。

Haml

Haml(HTML abstraction markup language)は、HTML/XHTMLを効率的に記述するためのマークアップ言語および記法です。

Ruby on Rails

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

0グッド

0クリップ

投稿2020/02/14 12:20

ruby on railsで簡単なメモアプリを作っています。

SequelProでmemosというテーブルを作成し、マイグレーションファイルを以下のように設定しました。

class CreateMemos < ActiveRecord::Migration[5.0] def change create_table :memos do |t| t.string :title,null:false t.string :body,null:false t.string :link t.timestamps end end end

まず、tips_controllerを作成し、以下のように設定しました。

class TipsController < ApplicationController def index @memo=Memo.all end def new @memo=Memo.new end def create Memo.create(memo_params) redirect_to root_path end private def memo_params params.require(:memo).permit(:title,:body,:link) end end

その後、view/tips/new.html.hamlを作成しform_withを使って以下のように作成しました。

.create .create--title 新しくtipsを作成する .cteate--tips =form_with(model: @tips, local: true) do |f| .create--tips--title =f.text_field :title,class:'text-form',placeholder:'タイトルを入力' .create--tips--body =f.text_area :body,class:'text-body',placeholder:'本文を入力' .create--tips--url =f.text_field :link,class:'text-url',placeholder:'参考にしたURLを記入' .create--tips--send =f.submit "メモを残す"

この状態でローカルサーバーを起動するとtips/newまではできるのですが、最後のsubmitを押すと

No route matches [POST] "/tips/new"

とエラー表記が出ます。ターミナルでrails routesを行うと

root GET / tips#index tips GET /tips(.:format) tips#index POST /tips(.:format) tips#create new_tip GET /tips/new(.:format) tips#new

と表示されているので問題ないと思うのですが・・・?というかnewのページから送信を押したのにまたnewにつながる時点でおかしいのでしょうか?

原因が全くわかりません。どなたかよろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

view/tips/new.html.hamlファイルのform_withの記述が気になっています。
@tipsというインスタンス変数を参照していますが、これは正しくは@memoではないでしょうか?
dev newアクションで@memo`変数をセットしているので)

以下のように書き換えたらどうなるでしょうか?

rb

1=form_with(model: @memo, local: true) do |f|

投稿2020/02/14 12:27

shgtkshruch

総合スコア665

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

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

ryuuzu

2020/02/15 03:07

ありがとうございます。ご指摘の通り@memoにしたのですが新たに undefined method `memos_path' for #<#<Class:0x00007fecdfa2cf50>:0x00007fece41a32d0> とエラーが出てきました。 これはcreateアクションへのパスがないから出るエラーと聞いたのでルーティングとcreate.html.hamlを作成したのですが表示が変わりません。
shgtkshruch

2020/02/15 03:17

なるほど。 `=form_with(model: @memo, url: tips_path, local: true) do |f|`でFormを送信するpathを変更するとどうでしょうか? form_with の使い方は、こちらの記事が詳しいので参考にしてみてください。 https://techracho.bpsinc.jp/hachi8833/2017_05_01/39502 ただ、今の実装はRailsの書き方としては少し不自然です。 `Memo`モデルとやり取りするのであれば、`MemosController`を作るのがRailsらしい書き方になります。 特別な理由がない限り、モデルとコントローラーは同じ名前で揃えるとRailsがよしなにルーティングなどを解決してくれるので、意識してみてください。
ryuuzu

2020/02/15 04:01

出来ました!ありがとうございます!おっしゃるとおり=form_with(model: @memo, url: tips_path, local: true) do |f|で書き直したら保存ができました! モデルとコントローラの名前は合わせると人間だけでなくrailsにとってもそのほうがわかりやすいってことなんですね!勉強になりました、ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問