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

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

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

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

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

1387閲覧

Ruby on Rails 4で作ったサイト上で、クエリ形式のパラメータを取得し、ヘルパーに入れているメソッドを動かしたい。

pecotech26

総合スコア7

Ruby

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

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2016/12/15 00:39

###自分で作った簡単なメソッドをWEBサイト上で動かしたい。
Rails 4 で作ったサイト上に、第N項(1=< N =< 100)のフィボナッチ数列の値を表示させるメソッドを作ったのですが、うまく表示されません。

###発生している問題・エラーメッセージ
Nが1以上100以下の範囲を外れたり、数字以外を入力したりした場合は、errorと表示させるようにしていて、errorは表示されるのですが、1~100の値を入れると何も表示されなくなってしまいます。

###該当のソースコード
↓↓結果が表示されるページのコード↓↓

html

1<%= form_tag("", method: "get") do %> #=>同じページのURLにクエリ形式でパラメータを付与する。 2 <%= text_field_tag 'input' %> #=>?input=""という形で取得。 3 <%= submit_tag("表示", name: nil) %> 4<% end %> 5 6<% if params[:input] == nil %> #=>パラメータが何もない時はこれが表示される。 7 <p>ここに表示されます。<p> 8<% else %> 9 <p><%= fibonaccical(params[:input])" %></p> #パラメータが付与されると、helper内に作った関数が動きだす。 10<% end %>

↓↓肝心のヘルパー内の関数のコード↓↓

ruby

1module StaticPagesHelper 2 def fibonaccical(input) 3 if input =~ /\A[1-9][0-9]*\z/ && input.to_i.between?(1, 100) 4 array = [1,1] 5 if input.to_i >= 3 6 nums = input.to_i - 2 7 nums.times do 8 sum = array[-1] + array[-2] 9 array << sum 10 end 11 end 12 "#{input}番目のフィボナッチ数列:#{array[input.to_i-1]}\n" 13 "#{input}番目までのフィボナッチ数列:" 14 i = 0 15 while i <= input.to_i-1 16 "#{array[i]} " 17 i += 1 18 end 19 else 20 "error" 21 end 22 end 23end 24

正しい値が入力された時にうまくいかない理由がわかる方がいたら、教えていただきたいです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

ヘルパーメソッドfibonaccical(input)からreturnで文字列を出力する必要があります。
今の状態は、fibonaccical(input)から戻り値が無いため何も表示されていない状態になっています。
少々汚いコードになってしまいますが、一番お手軽には以下のようにすると良いかと思います。

ruby

1module StaticPagesHelper 2 def fibonaccical(input) 3 if input =~ /\A[1-9][0-9]*\z/ && input.to_i.between?(1, 100) 4 output_string = "" // 変数output_stringを空文字で初期化 5 array = [1,1] 6 if input.to_i >= 3 7 nums = input.to_i - 2 8 nums.times do 9 sum = array[-1] + array[-2] 10 array << sum 11 end 12 end 13 output_string += "#{input}番目のフィボナッチ数列:#{array[input.to_i-1]}<br />" // HTML上の改行<br />にする 14 output_string += "#{input}番目までのフィボナッチ数列:" 15 i = 0 16 while i <= input.to_i-1 17 output_string += "#{array[i]} " 18 i += 1 19 end 20 return output_string // 最後に表示内容を出力 21 else 22 "error" 23 end 24 end 25end

補足: "error"が表示表示されていたのは、Rubyではreturnが省略できるため戻り値として正しく"error"が出力されたためです。

投稿2016/12/15 01:00

yuutetu

総合スコア88

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

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

pecotech26

2016/12/15 01:54

回答ありがとうございます!!助かります。 ほぼうまくいったのですが、<br />の改行だけうまういかず、<br />がそのまま表示されてしまいました。。どうすればよいでしょうか?
pecotech26

2016/12/15 02:08

returnのところで、simple_formatを使ったらうまく改行が動きました! return simple_format(output_string) ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問