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

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

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

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

Haml

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

Ruby

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

Ruby on Rails

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

Q&A

解決済

1回答

589閲覧

メッセージ送信が出来ない

yume0409

総合スコア45

Ruby on Rails 5

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

Haml

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

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2020/01/20 07:16

編集2020/01/20 10:39

メッセージ送信機能の実装をしているのですが、なかなか上手くいきません。
やった内容としては、アソシエーションを定義しました。
コントローラー内には

def create Tweet.create(text: tweet_params[:text], user_id: current_user.id) end private def tweet_params params.permit(:text) end

textを取り出す記述をしてストロングパラメーターを用いて投稿した際に悪いユーザーから守る記述をしました。
ちなみにメッセージ投稿のビューはこのようになっています。

.new-field = form_tag('/tweets', method: :post) do %h3.new-tweets ツイートする %textarea{placeholder: "ツイート文を入力してください", cols: "50", rows: "20", class: "new-text"} %i.fas.fa-camera %input{type: "submit", class: "submit-button"}/ -# type=>"submit"登録ボタン type=>"text"入力フォーム row=>text枠の高さ cols=>text枠の幅

答えではなくてもヒントだけでもいいので教えて頂けたら嬉しいです。
よろしくお願いします。

#補足
ありがとうございます!
name属性が抜けてたので、追加しました。

%textarea{placeholder: "ツイート文を入力してください", name: "text", cols: "50", rows: "20", class: "new-text"}

一つ思いついたのがビューも変更しないといけないと思います。

.chat-main .tweets-block .user-name aaa .messages aaa

メッセージが送られた時に反映したいビューファイルです。
メッセージのクラス名は

.messeges

aaaは仮置きで入れています。
これを消して変更する記述が必要だと思いますが、それを調べても私が検索下手なのか
ビューに関しては記事が出てきません。。。
よろしくお願いします。

#補足2
データとして受け取る記述は

def index @tweet = Tweet.find(params[:id]) end

このようにしてます。

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

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

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

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

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

guest

回答1

0

ベストアンサー

textareaにname属性が指定されていないので送信後paramsで受け取れていません。

補足について

まず、メッセージの送信はできるようになりましたか?
データとして受け取り、レコードとして登録できましたか?

一つ思いついたのがビューも変更しないといけないと思います。

思いつきで質問を追加されても対応しきれないので次から別の質問にしてください。
今質問者さんが作成されているアプリケーションの仕様を知らないのでざっくりとした質問にはざっくりとしか答えられないです。
メッセージを送信した後のメッセージ表示画面の話だと思いますが、コントローラを見た限りリダイレクト等がされてないのでメッセージの送信は非同期を想定していますでしょうか?
非同期であればフォームに手を加える必要があったり、jQueryを使う必要があったりとさらに複雑になるのでここで回答するにはボリュームが大きすぎます。

私が検索下手なのか

最初に述べたようにざっくりとしか答えられませんが、非同期で画面を変更するのであれば「Rails Ajax」などで検索すると参考になるページがいくつか見つかると思います。

追記

メッセージはまだ送信出来ません。

ボタンを押しても送信できていないということだと仮定しますが、原因はおそらく

haml

1.new-field 2 = form_tag('/tweets', method: :post) do 3 %h3.new-tweets 4 ツイートする 5 %textarea{placeholder: "ツイート文を入力してください", cols: "50", rows: "20", class: "new-text"} 6 %i.fas.fa-camera 7 %input{type: "submit", class: "submit-button"}/

の下2行分です。書き間違いかと思いましたが...。
まず、<input type="submit">がフォームの外に出てしまっています。
これは生成されたHTMLを確認してください。あとは未検証なので憶測ですが、

haml

1%i.fas.fa-camera 2 %input{type: "submit", class: "submit-button"}/

<i class="fas fa-camera">要素の中に<input type="submit">が入っていますが、
これだとsubmitボタンとしてうまく動かない気がします。やるなら

haml

1%button{type: "submit", class: "submit-button"} 2 %i.fas.fa-camera

こんな感じでは?

投稿2020/01/20 07:42

編集2020/01/20 10:47
Mugheart

総合スコア2349

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

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

yume0409

2020/01/20 10:16

メッセージはまだ送信出来ません。 データベースはSQLProを使用しているのですが、反映されていません。 今は手入力で3つレコードを作成してあります。 jQueryとJavaScriptに関しては全ての実装終わってから必要であれば実装していく予定です。 作成中のアプリはtwitterのような簡易チャットアプリを作成しています。
Mugheart

2020/01/20 10:47

> メッセージはまだ送信出来ません。 について回答に追記しました。
yume0409

2020/01/20 11:08

ありがとうございます。 外に出てしまっていたことが原因でした。 それで送信はされますが、エラーが出てしまったので、分からなければまた別に質問させて頂きます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問