短い文字列はstring
(省略可)、長い文字列はtext
を名前:型
の形で指定する。
$ rails g model interview url question:text answer:text
他には整数integer
、true/falseの型boolean
、時間datetime
などがある。
マイグレーションファイル db/migrate/20140112032552_create_interviews.rb が生成される。
空になることを禁止したいならnull: false
をつけ足す。
ユニークであることを保証したいならadd_index :interviews, :url, unique: true
の行を足す。
マイグレーションファイルが完成したら$ rake db:migrate
を忘れずに。(忘れて$ rails s
するとエラーになる)
コントローラ名は、CRUDできる「もの」(名詞)の複数形
- Create
- Read (index, show)
- Update
- Destroy
動作・操作を主体にしたいときは、動詞のing形、過去分詞形もあり
crawlは名詞もあったからcrawlsでもよかったかも。
$ rails g controller Crawlings
class CrawlingsController < ApplicationController
def index
end
def create
end
end
メソッド名(index, create)は、上のCRUDに対応している。
URLのパス名(/crawlings
)とCrawlingsControllerを結びつける。
config/routes.rb
resources :crawlings
場所は app/views/crawlings/index.html.erb
<form method="post">
ID:<input type="text" name="user_name" />
<input type="submit" value="送信" />
</form>
method="get"
のときはindex, method="post"
のときはcreateに対応する。
name="user_name"
の値は、コントローラ内でparams[:user_name]
で取得できる。
Interview.create!(
url: page.url.to_s,
question: question,
answer: answer,
created_at: date
)
create
にすると、もし失敗してもそのままスルー(falseを返す)。create!
の場合は失敗すると止まる。
Interview.find_by(url: 'http://...')
find_by!
にすると、もしなければ止まる。
Interview.where(url: 'http://...')
この場合urlはユニークなので意味がないけど。
where
と組み合わせることも可能。
Interview.count
Interview.where(url: 'http://...').count
もしアクションメソッドと同名のビューファイルがある場合は、それが出力される。(indexがその例)
redirect_to
を書くと、指定したURLに302でリダイレクトされる。
redirect_to crawlings_path, notice: '保存できました!'
処理結果を伝えるメッセージとして、notice
やalert
がビューで使用可。