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

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

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

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

Ruby

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

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

Ruby on Rails

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

HTML

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

Q&A

解決済

3回答

966閲覧

rails: rubyで書いたコードをhtml.erbに表示させたい。

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby on Rails 5

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

Ruby

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

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

Ruby on Rails

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

HTML

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

0グッド

1クリップ

投稿2018/12/14 22:52

編集2018/12/15 10:31

実現したいこと

gemのカレンダーを使わずにオリジナルでカレンダーを実装しています。
文献を参考にしながらなんとかrubyでカレンダーを作りました。
がしかし、rubyで書いたコードをどうhtml.erbに反映させるかが分かりません。
一応.rubyで記述した配列のデータをhtml.erbには表示することまではできます。
お分かりの方いましたらご教授願います。

ruby

1class BookingController < ApplicationController 2 def top 3 @posts = [ 4 "今日からRailsの勉強するよー!", 5 "カレンダーページ作成中!" 6 ] 7 8 month_table = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] 9 10 require "date" 11 today = Date.today 12 13 #うるう年か? 14 is_uruu = ->(year) { 15 (year % 4 == 0 and year % 100 != 0) or year % 400 == 0 16 } 17 18 #西暦1年1月1日から何日目か(すべてグレゴリオ暦で計算) 19 days = ->(year, month, day) { 20 uruu = ->(y) { 21 y / 4 - y / 100 + y / 400 22 } 23 month_days = ->{ 24 month_table[0, month].inject(&:+) + (is_uruu.(year) && month > 2 ? 1 : 0) 25 } 26 y1 = year - 1 27 y1 * 365 + uruu.(y1) + month_days.() + day - 1 28 } 29 30 #曜日の計算 31 week_number = ->(year, month, day) { 32 (days.(year, month, day) + 1) % 7 33 } 34 35 #カレンダーの出力 36 Calender = ->(year, month) { 37 gen = ->(from, to) { 38 (from..to).map {|i| sprintf("%2d ", i)}.join 39 } 40 putout = ->(i) { 41 last = month_table[month] 42 last += 1 if is_uruu.(year) and month == 2 43 while i + 6 <= last 44 puts gen.(i, i + 6) 45 i += 7 46 end 47 st = gen.(i, last) 48 puts st unless st.empty? 49 } 50 puts "#{year}/#{month}".center(27) 51 puts "sun mon tue wed thu fri sat" 52 w = week_number.(year, month, 1) 53 puts " " * w + gen.(1, 7 - w) 54 putout.(8 - w) 55 } 56 end 57end 58

html

1<h1>Booking#top</h1> 2<p>Find me in app/views/booking/top.html.erb</p> 3<% @posts.each do |post| %> 4<%= post %> 5<% end %>

イメージ説明

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

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

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

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

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

guest

回答3

0

ruby コードでは puts で出力してます。
erb では、html 用の形式で出力する必要があります。
以下のようなコードを調査して、ruby でのデータ生成ロジックと出力組み立てロジックを
どのようにするかをきめて、構成しなおしてみてください。

参考情報

  • Railsで今月のカレンダーを生成するerbコード

https://qiita.com/nnabeyang/items/8b54a28551983d9cdb32

  • <table/> 形式でカレンダーを表示させる(ヘルパーメソッド)

http://gouf.hatenablog.com/entry/2018/01/31/005255

投稿2018/12/15 02:46

katoy

総合スコア22324

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

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

0

ベストアンサー

このBookingControllerのコードですが、JavaScriptのようにLambda(Rubyでは->(){...}で作られるオブジェクト)を多用しているのはさすがにRubyでは分かりにくくなる気がしますね…。

素直にapp/models/calendar.rbとかにCalendarクラスを作って、uruuとかdaysとはかCalendarクラスのメソッドとして実装してみるのをおすすめします。Calendarクラスにしてみた例は後ろに書いておきます。

その上で、コントローラからビューに情報を渡すには、@postsと同様に、インスタンス変数を使うことになるでしょう。

ruby

1### app/controllers/boking_controller.rb 2 3class BookingController < ApplicationController 4 def top 5# 略 6 today = Date.today 7 @calendar = Calendar.new(today.year, today.month).to_s 8# 略 9 end 10end 11 12### app/views/top/index.html.erb 13 14<h1>Booking#top</h1> 15<p>Find me in app/views/booking/top.html.erb</p> 16<% @posts.each do |post| %> 17<%= post %> 18<% end %> 19 20<pre> 21<%= @calendar %> 22</pre>

もっとも、ここで<pre>でくくっているように、これだけだとただの文字列として表現されているので、タグを生成しないといけません。おそらくは<table>, <tr>, <th>, <td>あたりを使うことになるかと思います。具体的なやり方は、katoyさんの紹介されている記事などを参考にするとよいでしょう。下のCalendarクラスを使うとすると、to_sメソッドに加えて、HTMLとして生成するto_htmlメソッドを実装してみるとよさそうです。


Calendarクラスの例

もう少し手を入れた方が良さそうですが、元のコードとかけ離れてしまっても分かりにくいかと思うので、あまり変えずにクラス化しました。

ruby

1require "date" 2 3class Calendar 4 ## month_tableは共通で使うので定数にしています 5 MONTH_TABLE = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] 6 7 # コンストラクタ 8 def initialize(year, month) 9 @year = year 10 @month = month 11 end 12 13 #うるう年か? 14 ## Rubyでは真偽値を返すメソッドは`is_xxx`ではなく`xxx?`という命名にする場合が多いです 15 def uruu?(year) 16 (year % 4 == 0 and year % 100 != 0) or year % 400 == 0 17 end 18 19 def uruu(y) 20 y / 4 - y / 100 + y / 400 21 end 22 23 #西暦1年1月1日から何日目か(すべてグレゴリオ暦で計算) 24 def days(year, month, day) 25 month_days = MONTH_TABLE[0, month].inject(&:+) + (uruu?(year) && month > 2 ? 1 : 0) 26 y1 = year - 1 27 y1 * 365 + uruu(y1) + month_days + day - 1 28 end 29 30 #曜日の計算 31 def week_number(year, month, day) 32 (days(year, month, day) + 1) % 7 33 end 34 35 def gen(from, to) 36 (from..to).map {|i| sprintf("%2d ", i)}.join 37 end 38 39 def putout(i, year, month) 40 buf = "" 41 last = MONTH_TABLE[month] 42 last += 1 if uruu?(year) and month == 2 43 while i + 6 <= last 44 buf << gen(i, i + 6) + "\n" 45 i += 7 46 end 47 st = gen(i, last) 48 buf << st + "\n" unless st.empty? 49 buf 50 end 51 52 #カレンダーの出力 53 def to_s 54 buf = "" 55 buf << "#{@year}/#{@month}".center(27) + "\n" 56 buf << "sun mon tue wed thu fri sat" + "\n" 57 w = week_number(@year, @month, 1) 58 buf << " " * w + gen(1, 7 - w) + "\n" 59 buf << putout(8 - w, @year, @month) + "\n" 60 buf 61 end 62end

投稿2018/12/15 06:27

編集2018/12/15 06:31
takahashim

総合スコア1877

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

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

退会済みユーザー

退会済みユーザー

2018/12/15 10:38 編集

ご教示していただいたコードをそのまま実行してviewに表示させることまでできました。 お聞きしたいことがあるのですが、日にちと曜日が一致していない箇所はコードが原因なのでしょうか?
guest

0

言語に関係なくフレームワークの使い方になってくると思うんですがキーワードとしては「rails view 変数 受け渡し」かなあと。
コントローラで定義した変数を対象のビューファイル(Railsの場合は.erb)に渡すやり方をお求めだと思うので。

あと「このビューにしか使わない」のであればビューに直接処理を書くやり方もあるはずなので、そこは要件とやり易い方で。

投稿2018/12/14 23:12

編集2018/12/14 23:15
m.ts10806

総合スコア80850

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問