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

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

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

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

Sinatra

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

Q&A

解決済

1回答

2976閲覧

sinatraでruby main.rb -オプションしても繋がらない

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

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

Sinatra

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

0グッド

0クリップ

投稿2016/02/29 08:04

編集2016/02/29 08:10

某サイトのチュートリアルを行っていて、途中までは動いていたのですが、このファイルから動かなくなってしまいました。
このコードを書いて、ruby main.rbでコマンドを打ってもブラウザがずっとロードしている状態で変わりません。
オプションつけたり、gemのアップデートなどもしましたが、一向に変わりません。
わかる方いましたらお願いします。
単純なミスでしたらすみません...

main.rb

1require 'rubygems' 2require 'sinatra' 3require 'sinatra/reloader' 4require 'active_record' 5 6set :bind,'localhost' 7set :environment, :production 8set :port,4567 9 10 11ActiveRecord::Base.establish_connection( 12 "adapter" => "sqlite3", 13 "database" => "./bbs.db" 14 ) 15 16class Comment < ActiveRecord::Base 17end 18 19get '/' do 20 @comment = Comment.order("id desc").all 21 erb :index 22end 23

index.erb

1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <mata charset="utf-8"> 5 <title>BBS</title> 6</head> 7<body> 8 <h1>BBS</h1> 9 <ul> 10 <% @comments.each do |comments| %> 11 <li data-id="<%= comment.id %>"> 12 <%= comment.body %> 13 </li> 14 <% end %> 15 </ul> 16</body> 17</html>

import.sql

1create table comments( 2 id integer primary key, 3 body text 4);

環境は
rubyがruby 2.0.0p481 (2014-05-08 revision 45883) [x86_64-darwin14.4.0]
sinatraがSinatra (v1.4.7)
macが10.10.5です。

よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

コピペして、こちらでも試してみました

エラー発生

sh

12016-03-06 13:31:32 - NoMethodError - undefined method `each' for nil:NilClass:

配列であることを期待して、each メソッドを利用しようとしているものの、それの中身が nil なので、エラーが出ていますね
(nileach メソッドを持っておらず、 Arrayeach を持っています)

each を使っているところは今回 @comments だけですので、ほぼ そこが原因でしょう

Sinatra とerb の関係

Sinatra 側で @ を付けた「インスタンス変数」は、ビュー側...erb...で持ち回すことができます

その関係性に注目してみると、エラーの原因や意味が見えてくるのではないでしょうか

動作するコード

書き換えのあった部分をコメントアウトしました

手元のコードと見比べてみてください

views/index.erb

erb

1<!DOCTYPE html> 2<html lang="ja"> 3 <head> 4 <mata charset="utf-8"> 5 <title>BBS</title> 6 </head> 7 <body> 8 <h1>BBS</h1> 9 <ul> 10 <% # @comments.each do |comment| %> 11 <% @comments.each do |comment| %> 12 <li data-id="<%= comment.id %>"> 13 <%= comment.body %> 14 </li> 15 <% end %> 16 </ul> 17 </body> 18</html>

main.rb

ruby

1require 'sinatra' 2# require 'sinatra/reloader' # 手元の環境にないのでコメントアウトしました 3require 'active_record' 4 5set :bind, 'localhost' 6set :environment, :production 7set :port, 4567 8 9ActiveRecord::Base.establish_connection( 10 'adapter' => 'sqlite3', 11 'database' => './bbs.db' 12) 13 14class Comment < ActiveRecord::Base 15end 16 17get '/' do 18 # @comment = Comment.order('id desc').all 19 @comments = Comment.order('id desc').all 20 erb :index 21end

その他

Ruby の場合、2スペースでのインデントをするのが一般的なようです

とくべつルールやこだわりがなければ、そちらに合わせてみてはいかがでしょうか


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

Links

投稿2016/03/06 04:51

gouf

総合スコア2321

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

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

退会済みユーザー

退会済みユーザー

2016/03/07 05:55

回答いただきありがとうございます。 試してみようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問