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

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

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

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

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Sinatra

Sinatraは、Rubyで作られた オープンソースのWebアプリケーションフレームワークです。

Q&A

解決済

1回答

482閲覧

Ruby Sinatra テキストボックスが空欄の場合に文字を置き換えたいが、エラーが発生してしまう

foxkun

総合スコア17

Ruby

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

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Sinatra

Sinatraは、Rubyで作られた オープンソースのWebアプリケーションフレームワークです。

0グッド

0クリップ

投稿2019/08/25 05:10

編集2019/08/25 05:16

Rubyを始めたてであやふやな部分が沢山あり
質問内容もぐちゃぐちゃで申し訳ないです。
Rubyとsinatraで簡易掲示板を作っているのですが、投稿フォームの名前用テキストフィールドの中身が空欄であるときに名前を「名無し」と置き換えたいです。
しかしコードを書いてみたのですが、エラーが出てうまく実装できません。
どこか間違っているのでしょうか、

ruby

1post "/new" do 2 if params[user_name] != "" 3 Comment.create({:user_name => params[:user_name], :body => params[:body]}) 4 else 5 Comment.create({:user_name => "名無し", :body => params[:body]}) 6 end 7 redirect "/" 8 erb :index 9end

の部分を
名無しに置き換える処理はしないコード

ruby

1post "/new" do 2 Comment.create({:user_name => params[:user_name], :body => params[:body]}) 3 redirect "/" 4 erb :index 5end

に変えると正常に動作します。
なにか知識が抜けているかもしれません。
どなたかお手を貸してください、お願いします。

コード

main.rb

Ruby

1require "sinatra" 2require "sinatra/reloader" 3require 'active_record' 4 5ActiveRecord::Base.establish_connection( 6 "adapter" => "sqlite3", 7 "database" => "./bbs.db" 8) 9 10class Comment < ActiveRecord::Base 11end 12 13get "/" do 14 @comments = Comment.order("id desc").all 15 erb :index 16end 17 18post "/new" do 19 if params[user_name] != "" 20 Comment.create({:user_name => params[:user_name], :body => params[:body]}) 21 else 22 Comment.create({:user_name => "名無し", :body => params[:body]}) 23 end 24 redirect "/" 25 erb :index 26end 27 28get "/delete/:id" do 29 @comments = Comment.find(params[:id]) 30 erb :delete 31end 32 33post "/delete/:id" do 34 if params.has_key?("ok") 35 comment = Comment.find(params[:id]) 36 comment.destroy 37 redirect "/" 38 else 39 redirect "/" 40 end 41end

index.erb ... メインページ 投稿内容を表示、または新規投稿

ruby

1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <mata charset="utf-8"> 5 <title>掲示板</title> 6</head> 7<body> 8 <h1>掲示板</h1> 9 <ul> 10 <% @comments.each do |comment| %> 11 <li data-id= "<%= comment.id %>"> 12 <%= comment.user_name %>: 13 <%= comment.body %> 14 <a href="/delete/<%= comment.id %>" class="btn btn-danger">削除</a> 15 </li> 16 <% end %> 17 </ul> 18 <h2>投稿フォーム</h2> 19 <form method="post" action="/new"> 20 名前 <input type= "text" name="user_name"> 21 内容 <input type= "text" name="body"><input type= "submit" value="投稿"> 22 </form> 23</body> 24</html>

delete.erb ... 投稿したコメントを削除

ruby

1<p>本当にこの投稿を削除しますか?</p> 2<blockquote><p><%= @comments.body %></p></blockquote> 3<form action="/delete/<%= @comments.id %>" method="POST"> 4 <button type="submit" class="btn btn-primary" name="ok">OK</button> 5 <button type="submit" class="btn" name="cancel">キャンセル</button> 6</form>

開発環境

・MacOS 10.14.6
・VSCode 1.37.1
・Ruby 2.5.0

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

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

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

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

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

gouf

2019/08/25 06:02

「エラーが出て」ここはどのような状況・エラーメッセージになっていますか? もしかして、「undefined local variable or method `user_name'」と出ていませんか? 加えて、「file: main.rb location: block in <top (required)> line: 27」とファイル名やエラーが発生している行数の情報も記されていませんか?
guest

回答1

0

ベストアンサー

たぶん String として書くべきところを変数として解釈される書き方をしているのが原因かもしれません

ruby

1# if params[user_name] != "" # before 2if params['user_name'] != "" # after

あと、 if の部分で同じような処理を書いているので、その部分はもしかしたら次のように書き換えることができるかもしれません

ruby

1# post #... do ... 2 comment = Comment.new(user_name: params[:user_name], body: params[:body]) 3 comment.user_name = '名無し' if comment.user_name.empty? 4 5 comment.save! 6# ... end ...

こういったエラー発生の多くは人間とコンピュータとのコミュニケーションミスによって発生するものなので、「コンピュータの話」を聞いてあげることで、解決の糸口がつかめると思います

なにか参考になれば幸いです

投稿2019/08/25 06:09

gouf

総合スコア2321

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

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

foxkun

2019/08/26 04:32

ご指摘の通り、params[:user_name]というようにparamsハッシュのキーをちゃんと指定する形式に書き直すとエラーなく動作しました。回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問