メッセージ送信された後、ビューに反映されない。
簡易チャットアプリを作成しています。
コントローラーはこのようになっています。
def index @tweets = Tweet.includes(:user) end def new end def create Tweet.create(text: tweet_params[:text], user_id: current_user.id) redirect_to tweets_path end private def tweet_params params.permit(:text) end
indexはチャットビューのアクションです。
newアクションには何も定義していません。
createアクションは送信された時に内容を保存する記述を書きました。
それとストロングパラメーターを用いて悪意のあるユーザーから守る記述も書きました。
これで送信するとcreateアクション(tweets_path)へリダイレクトされますが、ビューに反映されないのです。
データベースはSQLProを使っているのですが、確認すると送信内容は保存されています。
なので反映させる記述がビューに必要?だと思いましたが、どういう風に記述していいのか、分かりません。。。
#試した内容
create.html.haml
.chat-main .tweets-block .user-name aaa .messages = tweets.text %i.fas.fa-ellipsis-h = link_to "返信", "#", class: "reply" .time 時間 .tweets = link_to new_tweets_path do %i.fas.fa-pen
ビューに反映したいクラス名はmessagesです。
そこをtweetsテーブルのtextカラムから取ってきたいので、
= tweets.text
としてみましたが、反映されていません。
ちなみにエラーは出ていません。
一体何が悪いのでしょうか?
よろしくお願いします。
#補足
回答ありがとうございます!
def create @tweet = Tweet.create(text: tweet_params[:text], user_id: current_user.id) end private def tweet_params params.permit(:text) end
createアクションはこのようにしました。
@tweet = を付け足して、redirect_to tweets_pathを消しました。
そしたら自動的にcreate.html.hamlが呼び出され、create.hrml.hamlは
.chat-main .tweets-block .user-name aaa .messages = @tweet.text %i.fas.fa-ellipsis-h = link_to "返信", "#", class: "reply" .time 時間 .tweets = link_to new_tweets_path do %i.fas.fa-pen
このようにしました。
とりあえず、テキストの部分は反映されたのですが、その直後リロードするとshow.html.hamlに遷移され、
= @tweet.textを定義しても
NoMethodError in Tweets#show undefined method `text' for nil:NilClass
というエラーが出ます。。。
回答1件
あなたの回答
tips
プレビュー