新人研修でrails。検索フォームを作る。(テキストの部分一致検索機能だけ実装編)
会社の新人研修でrailsの社員検索システムを作りました。
基本的な機能は先輩社員さんにひと通り聞きながら実装できたので、忘れないようにmemoします。
・名前の部分一致検索ができること。
・役割検索ができること。
この二つを実装しました。
rails g scaffoldで、ひな形をもらった状態。memberクラスと、roleクラスがあり、
member belongs_to :role
の関係です。
とりあえず、formに入力された値の部分一致検索機能のみ実装していきます。
・名前の部分一致検索の実装
(1)members_controllerに、searchというメソッドを追加。
def search
@members = Member.where("name like ?" , "%#{params[:name]}%")
render :action => 'index'
end
後にscopeを使うのですが、そこは後から書きます。
画面遷移をして、index.html.erbテンプレートに、@membersに格納したデータを流し込みます。(render :action => 'index'の部分。)
その結果、http://localhost:3000/members/search
のアドレスに検索結果が現れるように実装していきます。
実装って響きマジでいいですね。
(2)routes.rbに、searchのroutingを定義する。
scaffold では、resources :member のみなので、
resources :members do
collection do
post 'search'
end
end
とします。
最後に、入力フォームをとsubmitボタンを作りたいと思います。
(3)index.html.erbに、入力フォームを作る。
<%= form_tag(:controller=>'members', :action=>'search') do %>
<%= text_field_tag :name %>
<%= submit_tag "検索" %>
<% end %>
今回は
になります。
この状態で検索ボタンを押すと、nameにtext_fieldに入力したものが入って、params[:name]でそれを検索できるようになるらしいです。うまく言語化できない。
searchメソッドで定義してるとこです。
仕事でコードを書くことが少なくなりそうなので、なるべく勉強を怠らないようにしたいと思います。
次は
3分で「俳句が趣味です。」と言えるようになる方法
こんにちは。
俳句が趣味と言いつつも何かそれっぽいことを書いてないので、
今日は3分で「俳句が趣味です。」と言えるようになる方法を書こうと思います。
俳句って、昔の人の有名な俳句はこうで、歴史はこうで、とか知らないと作れないわけじゃないですし、始めれないわけじゃないです。
ぶっちゃけ僕もよく知りません。15年くらいやってるのにw
そんなの知らなくても作れちゃいます。
ルールは2つだけです。
①「一つだけ季語を使うこと」
②「5・7・5の17文字で作ること」
以上!!!
いや、本当に。そんな疑わしい目をしないでください。
季語はちょっと難しいですが、「季節をあらわす言葉のこと」です。
「秋の空」
はい、これ季語です。
「秋の朝」「秋の昼」「秋の夜」「秋の星」「秋の風」
ぜーんぶ「季語」です。秋を春と夏と冬とに変えるだけで、全部違う「季語」です。
すごいですね。もう20個以上覚えちゃいましたよ!!!
あとは5・7・5の17文字で作ることでしたね。
じゃあ、早速ですが作ってみましょう。さっきの季語を使って・・・
秋の空
◯◯◯◯◯◯◯
◯◯◯◯◯
この◯に言葉を入れるだけです。
あれ、勘の良い人は気づいちゃいました?
そうです。自分で考えるとこってたった12文字しかないんですね。
3分の1誰かが考えてくれた言葉を丸パクリできる文学なんて他にないですよね?
その12文字なんてほんと何でもいいです。
例えば・・・
秋の空
ああ疲れたな
休みたい
はい、これで俳句です。
昔の言葉なんか使わなくたっていいんです。すぐ出来そうじゃないですか?
例えば僕なんかこの時期に変な色のタイツ履いてる人が好きなんですけど、
水色の
タイツが好きで
秋の空
これも立派な俳句です。性癖だってフェチだって俳句になっちゃうんです。
俳句にしちゃいけないことなんてありません。
特別なことじゃなくてもいいんです。高貴なことじゃなくてもいいんです。
<まとめ>
12文字の言葉を考えて、その頭か後ろに「季語」をくっつけるだけで「俳句」。
思ってたより全然簡単じゃあないですか?
さあ、これであなたも今日から「趣味は俳句です」と言いまくりましょう。
新涼の西日の匂ふ馬の群れ(インターン7日目)
俳句野郎っぽく、タイトルに俳句を載っけてみました。
自分で考えたり、好きな句を載せたりすると思います。
昨日の怖話を触った感想から、改善点を明確にし、改善案を提示することが今日のミッションでした。
問題点
- サウンドノベル調の時、クリックだけでしか進まない。話の途中でのマウス操作は気が散る。
- アイコン(TOPの「〜〜の一覧を見る」)が初めから凹んでいるようで、クリックできるかぱっと見分からない。
- ブックマークの使い道が分からなかった。
- マイページから新規の話が投稿ができない。
改善点
・サウンドノベル調の時、クリックだけでしか進まない。話の途中でのマウス操作は気が散る。
クリックだけでなく、キーボード上でも進むようにすればいいのではないでしょうか?
クリックとEnterKeyは同様の役割をすることがほかのサイトでも多く使われているため、EnterKeyが直感的でわかりやすいと思います。
・アイコン(TOPの「〜〜の一覧を見る」)が初めから凹んでいるようで、クリックできるかぱっと見分からない。
凹んでないアイコンを使うといいのでは。凹んでいる暗さとカーソルを合わせた時の赤が、怖さを際立たせていると思うので雰囲気を壊さないようなものがいいと思いました。
・ブックマークの使い道が分からなかった。
話の途中のブックマークアイコンに気が付かず、クリックすれば先に進むよ、ということかと思いました。栞のアイコンとか、「このページをBookmark」のような文字など、端に置いとくとわかりやすいかな、と思います。
・マイページから新規の話や漫画、写真が投稿ができない。
「マイページ」→「投稿した話・画像・漫画」のページで、編集だけでなく新規投稿リンクをつけると、画面遷移が少なく、使いやすさが増すと思います。
以上になります。見やすいマークアップは難しいです。定義リストも試しましたが、思ったようにはなりませんでした。
インターン作業週1日目。(怖話の感想。)
作業週一日目です。お金がかかるのでタバコを辞めようと思って、色々考えていると、もしかしたらヨモギとか、たんぽぽとかの野草で作れるんじゃないかと思いたち、検索すると本当に作っている人が結構いました。これならノーコストだし、タバコやめなくてすむじゃん!とテンション上がったけど、家の中にヨモギやタンポポを吊るして干してまでタバコを吸いたいのかと言われれば、そうでもないので、大人しくこれからも440円払っていきます。
作業週一日目ということで、「怖話」を一日中いじってみて、気づいたことを書いていこうと思います。
怖い話割と苦手なんですよね。好きな方なんですけど、お昼に読んで思い出して夜に眠れなくなるパターンが多いです。洋ホラー的な派手に死んだり、血ぶわーみたいなのはワクワクしながら見れるんですけどね。ジェイソンのベッドを二つ折りにするやつとか、顔面を液体窒素で割るみたいなのはきゃっきゃきゃっきゃ言いながら見れるんですけど、邦ホラーはきっついす。昼に読んで夜に思い出してしまって寝れなくなるパターンが多いです。
以下、感想になります。
(主にPCサイトについて)
- サウンドノベル風に進んでいく話の場合、クリックだけでなく「Enterキー」でも話が進んでいけば便利かな、と思いました。
- アイコンが全体的に選択する前から濃い色になっていて、慣れるまでに時間がかかりました。
- 初めはブックマークの使い方が分かりませんでした。ブックマークするにはここをクリック!みたいな文字があればいいなあ、と。でも話の途中だし、ちょっと冷めるかもですが。
- 「マイページ」 > 「投稿した話・漫画・画像」のページから新規投稿できるようになると便利になりそうです。
- 僕だけかもしれないですけど、TOPページで迷子になってました。
スマホアプリについては、直感的な感覚で操作できました。
僕の機種が古いからだとは思うんですが、少し動作が重く感じました。
朝から読んでるんですけど、怖いす。怖い怖い。
爪とか髪の毛とかもう怖い怖い。
インターン二日目、三日目(HTMLの基本との格闘編)。
アムウェイやら起業のためになにかやろうみたいな、夢を実現させるためにキラキラしている人にやたらウケのいい上田です。
どっからどう考えても遠回りの提案をされても困るんです。
僕は南の外れの週に一度しか連絡船が来ないような無人島を退職金で買って、妻と柴犬と馬と羊とやぎと鶏と野菜に囲まれた生活がしたいだけなのです。
続きを書きます。
HTMLを昨日と今日と、そして明日もやります。
・head内の<meta>要素
これまでよくわかってなかったのですが、
<meta name="author" content="上田拓史">
<meta name="keywords" content="上田, 拓史, うえだ, たくし">
他にも、"keywords"のところに、"description"(このHTMLの説明)もいれられるそう。
こんな風に書くことで、サーチエンジンに情報提供をすることができる、という説明に納得しました。SEOなんかにも関係してくるのでしょうか?
もともと論文を読みやすく、探しやすくするために作られた、という歴史背景も後押しでした。歴史も大事なんですね。目的を知る上で。
・スタイルシートの読み込み順
明確に
というルールがあるとは知りませんでした。
・form
formのtypeやメソッドに関して、概要をつかむことが出来ました。
特に忘れたくないのは、
formとは「何を」(コントロール(データを入力する手段)で範囲を明示)「どこに」(データを受け取るプログラムを指定するaction属性)「どうやって」(postとgetのmethod属性)送信するのかを提供するものだということ。
メソッドの使い分け
post・・・新規データのデータを送信、登録するためなどに使う。
get・・・検索キーワードを入力して、データベースから情報を取得するためなどに使うなど、常に一定の結果を伴う時に使う。文字にリンクを貼って、同じページのその章に飛ぶとかにも使える。
formの<input type>の種類
text,radio,textarea,checkbox,select。用途に応じて使う。
<form method="post" action="mail to": メールアドレス?= "page-enquete">
これを使うことで、postの内容を指定したメールアドレスに送ることができる。
メールアドレスの後ろの"page-enquete"は、件名になる。
☆a要素タイプのname属性は、idと同様に同じ名前を使うことは出来ないけれど、input要素などのformのコントロールのname属性は、そのコントロールが指定する範囲内だけで、名前を指定するため、同じ名前を使うことが出来る。☆
わからなかったところ
・input type ="hidden"の使い方。用途の方法がわからず、イメージ出来なかった。
・input type = "file"による、ファイルの送信方法。MIMEのマルチパートデータとしてのプログラムに届く、とあるが、よく分からなかった。
・labelによる関連付け
label要素とそのidを示すfor属性。<label>要素の<for>属性と、<input>要素の<id>属性が関連している。同じ属性を指定することで、関連付けられる。
<label>要素の内容には、一つのコントロール(textだけ、とかradioだけ、とか。)しか含めることが出来ない。
一つのコントロールに、複数の<label>は付けられる。(selectメニューのgroup化をするときとか)
例)一つのコントロール<select>に対して、二つの<label>が付いている↓
<select name="area">
<optgroup label ="首都圏">
<option>東京</option>
<option>千葉</option>
<option>神奈川</option>
</optgroup>
<optgroup label = "四国">
<option>香川</option>
<option>愛媛</option>
<option>徳島</option><option>高知</option>
</optgroup>
</select>
・<tab index>
キーボードのTABキーで移動できるようになる。
<tab index = "数字">
小さい数から順に移動していく。
<accesskey = "キー名"/>
ショートカットキー。
<img>属性を使うとき、表示できない時のためにaltでテキストデータを使う。
こういうユーザーに配慮するタグは知らなかったので、勉強になりました。
「詳しいHTML」の説明を三日目の後半に入ったのですが、全く頭に入ってこなかったので、また今日読み返したいと思います。
インターン二日目(ターミナルの基本との格闘編)。
ターミナルの基礎とHTMLの序章をやりました。ターミナルは〇〇やれ!って命令だとずっと思っていましたが、ただusr/local/binの文字を入力しているだけ、という認識が出来たのがちょっと革命でした。以下、実行したコマンドです。オプションの便利さに感動しました。
urlからファイルをDL。(後ろに-o ファイル名 をつけると、そのファイル名で保存できる。)
・saykana
ニコ生のあの声。オフィスでは怖くて実行出来ませんでした。家でやりました。ニコ生配信してる気分になりました。落ち込んだ時に使いたいです。
・Sudo
管理者権限で実行。「Sudo chown -R `whoami`」を実行しました。わかってないのは、どういう時に管理者権限で実行しないといけないのか、ということ。わかったのは、むやみに使うと怖い目に合うということ。
・Homebrew
何故かインストールされていたので、ターミナルに打っただけでした。
「Sudo chown -R `whoami` /takushiueda/local」管理者権限を使って、takushiueda/local以下の所有者をtakushiuedaに変更する。
ここからcurlコマンドを使ってHomebrewを導入しようとしたのですが、ちょっとURLが古かったみたいで出来ず→報告。
その後、Homebrewの動作には、Xcodeが必要だということで、もともと入っていたものを5.0にバージョンアップさせました。
・man
引数にコマンドを渡すと、マニュアルが見られる。どんなオプションが付いているのか見られる。
・バッククォート` `で文字を囲むと、その文字をコマンドとして実行して、出力結果に置き換える。
・touch
最終更新日を書き換えるコマンド。引数に関係ない名前を入れると、空ファイルも作れる。
・mkdir
ディレクトリを作れる。mkdir -p /usr/document/ディレクトリ名 みたいに、階層も分けられる。声に出した時、最も厨二の感じがして個人的に一番好きです。このコマンドを打つだけの仕事がしたいです。
・rm
Removeする。-rをオプションでつけて使うと、ディレクトリごと削除できる。
・cp
copyする。cp コピーしたいファイル名/コピーを置きたいディレクトリ、
cp コピーしたいファイル名/コピー後のファイルの名前 とかもできる。
cp -r で、ディレクトリの名前をいれると、ディレクトリごとにコピーできる。
・cat
引数に渡した二つのファイルの中身をつなげて表示。
一つだと、単にその中身を表示。
・ターミナルの自動化(shとshebang(シバン))
難しかったところその①。
「sh ファイル名」 は、ファイルの中に書かれてあるコマンドを順番に実行していく。
shebang(シバン)は、それを使って、ターミナルを自動化させる。
shebang(シバン)は、中身が#!で始まるファイル名を引数に渡して実行しようとすると、その後に書いてあるコマンドに、2行目以降の全てを渡すことができる。
#!/bin/sh
Aコマンド
Bコマンド
Cコマンド
みたいなファイル「auto」を作った場合に、
$ chmod u+x auto (→autoというファイル名にユーザー実行権限をプラスしている。)
$ /Users/takushiueda/auto
と打つと、AコマンドからCコマンドまで、順に実行してくれる。
ファイルの中の
#!/bin/sh
ここが理解できたときに、ターミナルはただusr/local/binの文字を入力しているだけというのがしっくりきました。
こういう風に作った自動化ファイルをスクリプトと呼ぶそう。
・export
難しかったところその②。
自分で作ったスクリプトを置くところは、usr直下にbinディレクトリを作ってそこに置くことが多いそう。けれど、PATHに設定されていないので、その自動化をするためにフルパスを打たないといけないので、自分でPATHを追加するなどの、環境変数を設定するコマンド。
export PATH = $PATH:~/bin
今までPATHに設定されていたものに、~/binを追加する。
~/binの~は、$homeの意味。
これで、自分のスクリプトファイル名を打つだけで、実行できるようになる。
理解はしたのですが、言語化できているかは微妙です。
(HTMLの基本との格闘編)に続きます。
※オプションはコマンドを作った人が好き勝手に設定しているそうなので、共通点もあれば、ないことも多いそう。こまめにmanコマンドで見ていくことを習慣に。
インターン一日目
今日から合同会社フィヨルド様のところでインターンとしてお世話になることになりました。 今日はLingr(チャットサイト)、Fulcrum(プロジェクト管理ツール)、Gravatar(アバター写真が統一できるツール)へ登録し、インターンの環境構築をやりました。
Lingrのチャットルーム参加に手間取り、屑っぷりを思いきり露呈してしまいました。 Githubは登録こそしていたものの、どう使うのかをいまいち把握できていません。gitを勉強してからなのかな、githubというくらいだし。
Fulcrumの使い方も読み、理解はしたのですが、怖くて触れずにいました。作業週までにどこをどういじれば何が変わって、どんな情報をどこから入手するのか把握せねばと思います。完了にしたけれどもう一度読み直します。
メモリやCPU、HDDも言葉としてなんとなく意味は理解していたのですが、座学的に学んだことはなかったです。ふわっとした知識でスペックスペック言ってた自分が恥ずかしい。
今日はターミナルの途中で終わってしまいました。ターミナルのオプションの役割の-a とか、-mとか、それってコマンドごとに決まっているんでしょうか?とりあえずヘルプで見たら分かるってことなんでしょうか?というのが今日の帰ってきてふと思った疑問です。
「git commit」みたいに、コマンドを二つ並べることができるのにも何か決まり事があるのだろうか・・・一応自分でも試してみましたが、ちょっと解消されないままでした。
分からないことを聞くことと、わからないことを発信していくことは大事!とは思うのですが、うまく文章にまとめることは難しい・・・
駒形さんが昼ご飯の時に仰ってた、「なにが分からないのか分からない」状態なんだと文章に起こして思ったりしています。同時に理解したことを文章にするのもそう。
このhtml編集だと、</br>で改行にならないのか。