instantrails&ruby初心者です。

簡単なDBを作って表示させていますが、長いテキストを入力すると、listでだらだらと表示されてしまうので一覧性がよくありません。
例えば、最初の数行だけを表示させたい場合はどうしたら良いでしょうか?
表示させた場合もテキストを入力したとおりに改行されず見づらいのですが改行を有効にするにはどうしたら良いのでしょうか?

よろしく、お願い致します。

回答の条件
  • 1人2回まで
  • 登録:2007/10/05 19:59:27
  • 終了:2007/10/06 20:52:33

ベストアンサー

id:kent0608 No.3

kent0608回答回数220ベストアンサー獲得回数232007/10/06 20:07:54

ポイント31pt

<% i=1 %>

<% tutorial.body.each_line do |line| %>

<% unless /^\s*$/ =~ line %>

<%= i %>行目:<%=h line.split(//u)[0,20] %>

<% i=i+1 %>

<% break if i > 2 %>

<% end %>

<% end %>

こんな感じでどうでしょうか?正規表現で比較して、空白じゃなければその行を出力して、指定の行数に達したらループを抜けさせてます。かなり苦しいですが・・

本当はもっとスマートなやり方があるはずなんですが、思いつきません(;-;

ちなみにSplitだとバイト単位で区切るため、日本語だと文字化けしてしまうのを忘れていました。一度配列に変換して、そこから範囲を選択するとベターです。(文字コードはUTF-8を想定しています)

id:qazz

大変ありがとうございました。

望む物が表示できました。

2007/10/06 20:49:21

その他の回答(2件)

id:KUROX No.1

KUROX回答回数3542ベストアンサー獲得回数1402007/10/05 23:45:26

ポイント35pt

Ruby on Railsは初心者なのではずしてるかもしれませんが、

その場合は、ごめんなさい。

----------------------------------

■改行を有効にする方法

http://www.thinkit.co.jp/cert/article/0605/2/3/2.htm

views(表示)を定義するHTMLがあると思います。

preタグで括れば、くくった部分の改行は有効になります。

http://www.tohoho-web.com/html/pre.htm

----------------------------------------

■最初の数行を表示させる方法

http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/mysql_10.htm

MYSQLなので、SQL文に、LIMITを用いて必要な行数を取得

します。

http://www.thinkit.co.jp/cert/article/0605/2/3/3.htm

あとは、このあたりの検索機能の作り方をみてくださいとしか

いえません。

id:qazz

ありがとうございました。

「PRE」で改行を含む表示ができました。

指定行数表示に関しては、いまだ解決できませんでした。

2007/10/06 01:39:18
id:kent0608 No.2

kent0608回答回数220ベストアンサー獲得回数232007/10/06 01:45:04

ポイント14pt

始めの数行だけを表示したい場合にはpaginateを使用します。

コントローラ内のアクションに、下記のようなインスタンス変数を定義します。

def hoge
  @pages, @texts = paginate(:texts, :order =>"id", :per_page=>10)
end

:texts にはModelクラスの複数形を表すシンボルを入れてください。

(例: User クラスなら :users )

@pages にはページ管理オブジェクトが入ります。

@items には:per_pageオプションで指定された数のデータが入ります。

後はアクションに対応するView( 上の場合 hoge.rhtml )内に下記のコードを埋め込みます。

<% @texts.each do |text| %>
<%= text.body.slice(0,128) %>
<% end %>

<%= pagination_links(@pages) %>

動作確認はしてませんが、多分これで動くと思います。

id:qazz

ありがとうございました。

sliceで試したところ、文字数の制限ができましたが、

行の指定はできなかったように思いました。

勘違いでしたらすみません。

変わりにeach_lineで、行単位のコントロールができることがわかったので

かなり苦しいですが

<% text.name.each_line do |line| %>

<%= line %>

<% break %>

<%end%>

一行出したところでbreakさせてます。

ただ、一行目が改行だけだと表示がなしになってしまいます。

2007/10/06 15:08:20
id:kent0608 No.3

kent0608回答回数220ベストアンサー獲得回数232007/10/06 20:07:54ここでベストアンサー

ポイント31pt

<% i=1 %>

<% tutorial.body.each_line do |line| %>

<% unless /^\s*$/ =~ line %>

<%= i %>行目:<%=h line.split(//u)[0,20] %>

<% i=i+1 %>

<% break if i > 2 %>

<% end %>

<% end %>

こんな感じでどうでしょうか?正規表現で比較して、空白じゃなければその行を出力して、指定の行数に達したらループを抜けさせてます。かなり苦しいですが・・

本当はもっとスマートなやり方があるはずなんですが、思いつきません(;-;

ちなみにSplitだとバイト単位で区切るため、日本語だと文字化けしてしまうのを忘れていました。一度配列に変換して、そこから範囲を選択するとベターです。(文字コードはUTF-8を想定しています)

id:qazz

大変ありがとうございました。

望む物が表示できました。

2007/10/06 20:49:21

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません