ihatov08 blog

プログラミング初心者だけどRailsとSwiftマスターします

Ruby on Rails

姓と名でわけて入力するが、出力は毎回姓と名を連結するときのメソッドの作成方法

app/models/hoge.rb def name [firstname, lastname].join(' ') end #もしくは def name firstname + lastname end

RailsでAさんは同じ連絡先を登録できないが、AさんとBさんで同じ連絡先を登録できるバリデーションの設定方法

app/models/contact.rb class Contact < ActiveRecord::Base has_many phones phoneモデルで同じcontact_idは持てないようにuniqunessな制約をつけると実現できる。 app/models/phone.rb class Phone < ActiveRecord::Base belongs_to :contact validates :p…

Railsでエラーを起こした入力欄にCSSを適用させる方法

railsでエラーを起こした入力欄はclass属性がfield_with_errorsのdivタグで囲まれる。 CSSでdiv.field_with_errorsにデザインを記述すれば、エラーを起こした入力欄に色をつけられる。 div.field_with_errors { background-color: #fcc; padding: 2px;

railsでmysqlのエラーが起きた時の対処法

bin/rake db:create エラーが起きる /home/vagrant/.gem/ruby/2.1.0/gems/activerecord-4.1.0/lib/active_record/connection_adapters/connection_specification.rb:190:in `rescue in spec': Specified 'mysql2' for database adapter, but the gem is not …

railsのdeviseでregistrations/newでpassword__confirmationはいらなかった

railsのdeviseを使う際に、registration/new.html.erbでpassword_confirmationカラムは入力必須で、このカラムをなくすには何かコードを書くか削除する必要があると思っていた。 code4startupでviewから単純に削除していたので、webricksで挙動を試してみた…

Railsでリセットボタンの実装方法

リセットボタン<input type="reset" ?>と普通のボタン<input type="button" ?>を作るためのメソッドはRailsには存在しない。一般的なタグを作るメソッドtagで次のように記述するか、<input type="reset" value="リセット" ?>のようにHTMLのタグを直接記述する。 <%= tag :input, :type => 'reset', :value => 'リセット' %> <%= f.button "リセット…

クッキーとセッションの違い

クッキー → ブラウザが保持するキーと値 セッション → webサーバーが保持するキーと値

Railsのアセット・パイプライン

アセットとは「資産」の意味で、CSS、JavaScript、画像といったファイルのことを指す。 アセット・パイプラインとは次の機能からなる。 ・変換 Sassで書かれたスタイルシートを CSSCSSに変換したり、CoffeeScriptのスクリプトをJavaScriptに変換する ・圧縮…

railsでバリデーション時にエラーを起こした入力欄にCSSを適用する方法

railsでバリデーションに引っかかった時は、エラーを起こした入力欄は、classがfield_with_errorsのdivタグで囲まれる。 CSSでdiv.field_with_errorsにデザインを記述すれば、エラーを起こした入力欄に色をつけることができる。 div.field_with_errors { bac…

railsで削除フラグを使いレコードを残しておく方法

destroyメソッドはSQLのDELETE文を実行して、テーブルからレコードを完全に消してしまう。 通常はこれでよいが、レコードを残したまま削除「状態」にしておきたいケースもある。 例 ・レコードの記録を残しておきたい時 ・退会させたユーザーを復活させたい…

RailsのCSRF対策

CSRFはクロス・サイト・リクエスト・フォージェリの略で、ウェブサイトへの攻撃手段の1つ。攻撃対象のウェブサイトに送信を行うフォームやリンクなどを別のサイトに用意し、ログイン中のユーザーにクリックさせる仕掛け。 勝手にブログの投稿を行わせたり、…

Railsでリソースベースのルーティングにアクションを追加する方法

アクションを追加するには、resourcesメソッドにブロックを渡し、ブロックの中で「HTTPメソッドを表すメソッド アクション名」を記述する。 その際、会員一覧のようにリソースの集合を表すアクションは、collectionメソッドのブロックで囲む。 会員の状態変…

modelで次、前ボタンの実装方法

単純に考えると、id+1もしくはid-1で実装できる。 class Video < ActiveRecord::Base def next Video.find(id+1) end def prev Video.find(id-1) end end しかし、この実装方法だと問題が生じる。 idが1,2,3,4,5,6が存在して、途中で例えばid=4を削除したと…

動画配信なんてyoutubeでいいじゃんと思っていたらwistiaは一味違かった

youtubeも素晴らしいサービス。 wistiaでも一味違った。 リードを獲得するため、メールアドレスを入力してくれた人だけに動画を見せてあげる。 誰(セッション)がどの動画をどれぐらい見たのかをトラッキングする。 HubSpot、Marketo、MailChimpなどマーケ…

bootstrapだけじゃなかった。「materializecss」ってサービスもあったのね。

materializecss.com bootstrapだけかと思っていたら、かなり似ているサービスがあった。 javascriptのコードも埋め込まないといけないようで、少し手間な気がする。。

railsのエラーメッセージの順番

is not a numberやcan't be blankなどのエラーメッセージの順番は、バリデーションを実行した順番になる。 これはモデルクラスの中でvalidatesメソッドやvalidateメソッドを並べた順番になる。 フォームの入力欄の並びと同じ順でエラーを表示したいときは、v…

railsのエラーメッセージのカスタマイズ

日本語化 gemパッケージrails-i18nを使う bundle install後はサーバー再起動すること エラーオブジェクトのaddメソッドの第2引数は、acceptedやblankなどのエラー名をシンボルで指定できる。 モデルのエラーオブジェクトはerrorsメソッドで取り出せる。 エ…

buildはすごく便利

例えばtweetするときに、tweetしたuserと関連付けたい。 まずはtweetモデルにuser_idカラムを追加して、どのuserの投稿か判別するようにする。 さらに、モデル間のアソシエーションをする。 tweetを投稿するviewのformからuser_idを選択もしくは、hidden_fie…

railsで独自のバリデーションメソッドを実装する

画像ファイルのアップロードのバリデーションを独自で定義してみた。 定義したのはcheck_imageメソッド。名前は任意で構わない。 if !['.jpg', '.png', '.gif'].include?ではjpg,png,gifファイルだったら、エラーにする。 errors.addでerrors連想配列にimage…

add_indexにnameをつける方法

indexにnameをつけたい場合はnameオプションでindex名を指定する。 add_index :favorites, [:tweet_id, :user_id], unique: true, name: 'TWEET_ID_USER_ID_UNIQUE' 例2 remove_index :members, name: 'name_index'

小さな喜びを大切に

プログラミングをはじめて半年。 まだまだ世に出ているアプリのような、大そうなものは作ることはできない。 ネットで公開されている誰かのように、独学で爆速で成長して、独自のウェブサービスを公開できているわけでもない。 そんなすごい人たちと比較する…

railsでnewページをmodalで表示させる方法

参考にしたサイト。 Rails 4 submit modal form via AJAX and render JS response as table row - Eric London's Blog このサイトの通りに作成したら、本当にnewページをbootstrapのmodalで表示することができた。 なんでこの結果になるのかコードを読み込ん…

日中仕事でその後はずっとプログラミング

8月にスパルタキャンプに参加してから、日中仕事をして、その後はプログラミングの生活をずっと送ってきている。 仕事の後のプログラミングはけっこう大変。楽しいけれど、仕事で疲れている中、頭を使うプログラミング。土日もどっぷりプログラミングしてい…

deviseでログイン情報を記録するチェックボックスを設置する方法

stack over flowより 6 down vote favorite I'm making a Rails App. I'd like to implement a check box 'remember me' for users to skip enter password from next time with using Devise:rememberable.but I can't figure out how to implement. if you…

railsでチェックボックスのバリデーションの実装方法(単数と複数の場合)

かなり悩みました。合わせると10時間くらいは悩んで、ググっていたような。PHPキャンプで講師の先生に条件分岐、アルゴリズムについて教えてもらったら(全然関係のないナベアツ、素数判定だが)、チェックボックスの実装についても閃いた。 まずは「規約…

railsのHTTPメソッド

HTTPのメソッド メソッド 機能 アクション GET リソースの要求 POST リソースの送信 HEAD ヘッダー部分だけを要求 PUT リソースの置換 PATCH リソースの一部更新 update DELETE リソースの削除 destroy 操作 Verb create POST read GET Update PATCH Delete …

gitを学ぶ

gitを学ぶのに最適なサイト。 このサイトでとりあえず学びたい。 www.atlassian.com

入れ子のルーティング(memberとcollection)

memberを用いるとusers/:id/◯◯のようなルーティングを生成することができる。 コントローラでidをprams[:id]で受け取ることができるので、showやeditのようなuserひとりひとりに用いるアクションの場合にmemberを用いる。 collecitonを用いるとusers/◯◯のよ…

別のコントローラをrenderする方法

createアクションで投稿の保存に失敗した場合(バリデーションに失敗)、再度フォームを表示しないといけない。 これまではrender :newでtweets/new.html.erbで表示されていたが、フォームをtweetsフォルダ以外のviewに移した場合、今回はhome/top/html.erbに…

TweetにログインユーザーのIDが自動で入るようにする

formからログインユーザーのIDを入れたり、選択式にすることもできる。 もしくはhidden_fieldとcurrent_user.idを用いて擬似的に自動的にログインユーザーのIDをformで送ることもできるが、下記では違う方法を紹介。 ストロングパラメータではuser_idを受け…