Top > Ruby on Railsあれこれ > 2-4 Webで日記をつけよう

Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
-
|
|
|
|
!
 
CREATE TABLE `rails`.`diaries` (
  `date` DATE NOT NULL,
  `content` TEXT NOT NULL,
  `imgFileUrl` VARCHAR(255),
  PRIMARY KEY (`date`)
)
ENGINE = InnoDB;

  0
  1
  2
  3
  4
  5
  6
development:
  adapter: mysql
  encoding: utf8
  database: rails
  username: rails
  password: rails
  host: localhost

  0
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Web日記</title>
</head>
<body>
  <h1>2-4のサンプル Web日記</h1>
  
  <%-- :action属性によるアクションメソッドの指定--%>
  <%= link_to '日記を書かずに内容を見る', :action => 'list' %>
  
  <%-- ファイルアップロードフォーム --%>
  <% form_tag({:action => 'entry'}, {:multipart => true}) do %>
    <%= error_messages_for 'diary' %>
    
    日付(2004-09-30のように記述して下さい)<br>
    <%= text_field 'diary', 'date', "maxlength" => 20 %>
    内容<br>
    <%= text_area "diary", "cont", "cols" => 40, "rows" => 10 %><br>
    画像ファイル<%= file_field "file", "imgFile", "size" => 60 %><br>
 
    <%= submit_tag "日記書き込み" %>
  <% end %>
</body>
</html>

  0
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
class DiariesController < ApplicationController
  
  #日記登録画面を表示します。
  def index
    @diary = Diary.new
    render :action => 'entry.html.erb'
  end
  
  #日記一覧画面を表示します。
  def list
    @diaries = Diary.find(:all)
    render :action => 'list.html.erb'
  end
  
  #日記登録処理
  def entry
    #リクエストパラメータからモデルを構築します。
    #"date"はPKなので、個別に代入します。
    @diary = Diary.new(params[:diary]) { |e|
      e.date = params[:diary][:date]
    }
  
    if params[:file][:formFile] != "" then
      @filename = params[:file][:formFile].original_filename
      @diary.imgFileUrl = "/images/" + @filename
      Diary.save_file(params[:file][:formFile])
    end
    
    if @diary.merge
      list
    else
      render :action => 'entry.html.erb'
    end
  end
  
end
  0
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
class Diary < ActiveRecord::Base
  
  #Primary Key列が"id"ではないので、個別に指定します。
  set_primary_key :date
  
  #ファイルデータ保存処理
  def self.save_file(file)
    File.open("public/images/#{file.original_filename}", "wb"){ |f| f.write(file.read) }
  end
  
  #日記データ登録
  def merge
    #該当レコード無しの時に例外が発生しないように、
    #findではなくfind_by_XXXXXを使用します。
    diary = Diary.find_by_date(self.date)
    if diary * nil
      res = save
    else
      self.content = diary.content + self.content
      res = diary.update_attributes(self.attributes)
    end
    return res
  end
  
end

  0
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Web日記</title>
</head>
<body>
<h1>2-4のサンプル Web日記</h1>
  
  <% @diaries.each do |@diary| %>
  <table border="1">
    <tr>
      <td colspan="2"><%=h @diary.date %></td>
    </tr>
    <tr>
      <td><%=h @diary.content %></td>
      <% if @diary.picture_url != nil then %>
      <td><p><img src="<%= @diary.imgfileurl %>" alt="picture"></p></td>
      <% end %>
    </tr>
  </table>
 
</body>
</html>

添付ファイル: fileror-sample2-4_5.jpg 288件 [詳細] fileror-sample2-4_4.jpg 306件 [詳細] fileror-sample2-4_3.jpg 305件 [詳細] fileror-sample2-4_2.jpg 298件 [詳細] fileror-sample2-4_1.jpg 271件 [詳細]

リロード   新規 編集 凍結解除 差分 添付 複製 名前変更   ホーム 一覧 単語検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS
Last-modified: 2012-08-08 (水) 23:25:34 (2923d)